返回与类型别名不匹配的函数不会产生错误 - 为什么?

时间:2016-11-24 17:36:58

标签: typescript

我有以下类型别名:

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

然后我就这样使用它:

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

    }
}

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

1 个答案:

答案 0 :(得分:2)

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

这是因为我可以这样做:

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

返回的函数在其签名中没有参数这一事实并不意味着它无法接收参数,您也可以这样做:

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

如果您有其他参数,您将收到错误:

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

    }
}

错误:

  

输入'(a:string)=> void'不能分配给'MyDecorator'类型。
  参数“a”和“目标”的类型不兼容   “函数”类型不能指定为“字符串”类型。