tho*_*rn̈ 7 typescript typescript-generics conditional-types
如何在没有重载签名的情况下使用条件类型重写它?
function foo(returnString: true): string;
function foo(returnString: false): number;
function foo(returnString: boolean) {
return returnString ? String(Math.random()) : Math.random();
}
Run Code Online (Sandbox Code Playgroud)
我尝试了以下代码,但没有它就无法编译as any:
function foo<T extends boolean>(returnString: T): T extends true ? string : number {
return (returnString ? String(Math.random()) : Math.random()) as any;
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能摆脱as any?
错误消息非常无用:
Type 'string | number' is not assignable to type 'T extends true ? string : number'.
Type 'string' is not assignable to type 'T extends true ? string : number'.
Run Code Online (Sandbox Code Playgroud)
我不确定为什么编译器不能按原样接受它(对 TypeScript 不太熟悉),但您可以这样做:
function foo<T extends boolean>(returnString: T): T extends true ? string : number;
function foo<T extends boolean>(returnString: T): string | number {
return returnString ? String(Math.random()) : Math.random();
}
Run Code Online (Sandbox Code Playgroud)
基本上,您将声明(公共签名)和实现分开,为声明提供更准确的签名,为实现提供更广泛的签名。
| 归档时间: |
|
| 查看次数: |
2976 次 |
| 最近记录: |