1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| type TypeName<T> = T extends any ? T : never type AType = TypeName<string | number>
type TypeNames<T> = T extends string ? string : T extends number ? number : T extends boolean ? boolean : T extends undefined ? undefined : T extends () => void ? () => void : Object;
type BType = TypeNames<() => void> type CType = TypeNames<string[]> type DType = TypeNames<(() => void) | string[]>
type Diff<T, U> = T extends U ? never : T type TestType = Diff<string | number | boolean, undefined | number>
type EType<T> = { [K in keyof T]: T[K] extends Function ? K : never }[keyof T] interface Part { id: number, name: string, subParts: Part[], undatePart(newName: string): void, undatePart2(newName: string): void, } type Test = EType<Part>
|