function createLabel<T extendsnumber | string>(idOrName: T): NameOrId<T> { throw"unimplemented"; } let a = createLabel("typescript"); // let a: NameLabel let b = createLabel(2.8); // let b: IdLabel let c = createLabel(Math.random() ? "hello" : 42); // let c: NameLabel | IdLabel
条件类型约束
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
typeMessageOf<T> = T extends { message: unknown } ? T["message"] : never; interfaceEmail { message: string; } interfaceDog { bark(): void; } typeEmailMessageContents = MessageOf<Email>; // type EmailMessageContents = string typeDogMessageContents = MessageOf<Dog>; // type DogMessageContents = never