2016-11-24 59 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'和'目標'的類型不兼容。
類型'功能'不可分配給類型'字符串'。

相關問題