在TypeScript中调用函数类型的联合
在TypeScript 3.0.3中,以下代码将给出编译时错误:在TypeScript中调用函数类型的联合,typescript,subtyping,structural-typing,union-types,Typescript,Subtyping,Structural Typing,Union Types,在TypeScript 3.0.3中,以下代码将给出编译时错误: function f() { if (true) { return (x: {left:String}) => x.left; } else { return (x: {right:String}) => x.right; } } class C { left: String = ""; right: String = ""; } f()(ne
function f() {
if (true) {
return (x: {left:String}) => x.left;
} else {
return (x: {right:String}) => x.right;
}
}
class C {
left: String = "";
right: String = "";
}
f()(new C());
我希望f的类型是函数f:{left:String;right:String}=>String或等效的函数。例如,Scala typechecker报告这样的类型
但是,我得到了以下类型错误:
./leftright.ts:17:1 - error TS2349: Cannot invoke an expression whose type lacks a call signature. Type '((x: { left: String; }) => String) |
((x: { right: String; }) => String)' has no compatible call signatures.
17 f()(new C());
函数类型的并集似乎不可直接调用,尽管我们可以在对象类型的并集中引用字段
有没有办法将f修改为可调用的,同时在其中保留if语句 只需注释f的返回类型,编译器就会看到您返回的每个函数都与该类型兼容:
function f(): (x: { left: String, right: String }) => String {
if (true) {
return (x: {left:String}) => x.left;
} else {
return (x: {right:String}) => x.right;
}
}
相关GitHub问题: