考虑以下函数重载和错误的实现。
function foo(param: number): boolean;
function foo(param: string): string;
function foo(param) {
if (typeof param === "number") {
// typescript does not complain that 12 is not boolean
return 12;
} else if (typeof param === "string") {
// typescript does not complain that {} is not string
return {};
}
}
这是人们的解释方式:
如果函数foo
使用数字参数,则应返回布尔值
如果函数foo
使用字符串参数,则应返回字符串
应禁止其他呼叫
确保类型检查器可以通过分析功能代码来验证1&2。 但是打字稿并不能做到这一点-它只能做到3。
是否可以在打字稿中实现上述行为?
答案 0 :(得分:0)
删除function foo(param)
。这会添加第三个重载,其中param
的类型为any
。
function foo(param: number): boolean;
function foo(param: string): string {
if (typeof param === "number") {
return 12;
} else if (typeof param === "string") {
return {};
}
}