【发布时间】:2021-07-14 03:16:47
【问题描述】:
以下 TypeScript 代码将无法编译:
interface ZeroFunc {
(value: string): string;
(value: number): number;
}
const zero: ZeroFunc = (value: string | number) =>
typeof value === 'string' ? '' : 0;
错误:
Type '(value: string | number) => "" | 0' is not assignable to type 'ZeroFunc'.
Type 'string | number' is not assignable to type 'string'.
Type 'number' is not assignable to type 'string'. ts(2322)
似乎在抱怨返回类型。
这个错误是有道理的,即使函数实现正确。
有没有办法正确指定这个函数的类型,不使用any作为返回类型?
是否有可能正确实现ZeroFunc接口?
编辑:
以下是对问题的更好说明:
function zero(value: string): string;
function zero(value: number): number;
function zero(value: string | number): string | number {
return typeof value === 'string' ? '' : 0;
}
type ZeroFunc = typeof zero;
const zero2: ZeroFunc = (value: string | number): string | number {
return typeof value === 'string' ? '' : 0;
}
zero2 的声明与上面的错误相同。但很明显,它们是完全相同的函数签名。我真的只是复制粘贴它。
ZeroFunc 类型的定义甚至与我上面的接口完全相同。
【问题讨论】:
-
只需添加第三个重载,它将接受并返回字符串和数字的联合
-
@captain-yossarian 这不起作用,在这种情况下,返回类型需要是
string & number。现在看来,这是不可能的。
标签: typescript overloading union-types