2016-11-24 58 views
0

我有以下类型别名:返回一个不匹配类型别名的函数不会产生错误 - 为什么?

type MyDecorator = (target: Function) => Function | void; 

然后我用这样的:

function z(): MyDecorator { 
    return function() { 

    } 
} 

而且它没有一个错误编译。为什么?我希望得到一个错误,因为返回的函数没有使用任何参数,尽管在类型别名中指定了一个参数。

+4

这是常见问题解答:https://github.com/Microsoft/TypeScript/wiki/FAQ#why-are-functions-with-fewer-parameters-assignable-to-functions-that-take-more-参数 –

+0

@JBNizet,谢谢 –

回答

2

它不会抛出错误的原因是因为返回的函数确实满足MyDecorator

这是因为我能做到这一点:

z()(() => { console.log("here"); }); 

返回的功能并没有在其签名的参数并不意味着它不能接收帕拉姆,你也可以做的事实这样的:

function z(): MyDecorator { 
    return function() { 
     let target = arguments[0] as Function; 
    } 
} 

如果你有其他PARAMS你会得到一个错误:

function z(): MyDecorator { 
    return function (a: string) { 

    } 
} 

埃罗rs与:

类型'(a:string)=> void'不可分配为键入'MyDecorator'。
参数'a'和'目标'的类型不兼容。
类型'功能'不可分配给类型'字符串'。

相关问题