如何使用条件类型而不是重载签名来重写此内容?
function foo(returnString: true): string;
function foo(returnString: false): number;
function foo(returnString: boolean) {
return returnString ? String(Math.random()) : Math.random();
}
我尝试了以下代码,但是没有 as any
,它不能被编译:
function foo<T extends boolean>(returnString: T): T extends true ? string : number {
return (returnString ? String(Math.random()) : Math.random()) as any;
}
我该如何摆脱“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'.
any
转换或重载是当前的解决方法。此外,在他们的六月设计会议记录中,他们提到:今天,除非它是另一个条件类型,否则类型不能分配给条件类型。,所以他们意识到了这一点,未来可能会有修复。 - CRice