TypeScript 手册提供了以下使用条件类型而不是函数重载的示例:
https://www.typescriptlang.org/docs/handbook/2/conditional-types.html
interface IdLabel {
id: number /* some fields */;
}
interface NameLabel {
name: string /* other fields */;
}
type NameOrId<T extends number | string> = T extends number
? IdLabel
: NameLabel;
function createLabel<T extends number | 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);
// ^ = …Run Code Online (Sandbox Code Playgroud)