【发布时间】:2020-06-22 15:10:29
【问题描述】:
令我惊讶的是,以下代码编译时没有错误(tsc 3.9.5):
interface IDateHandler {
handleDate: (Date) => void;
}
let dateHandler: IDateHandler = {
handleDate: (d: Date) => {},
};
dateHandler.handleDate([1, 2, 3]);
更令人惊讶的是,如果将 handleDate([1, 2, 3]) 替换为 handleDate([1, 2, 3], 4),tsc 会发出 error TS2554: Expected 1 arguments, but got 2.
所以它清楚地知道handleDate 的函数签名,但由于某种原因它完全忽略了类型本身。
甚至更多令人惊讶的是,省略接口声明使类型检查按预期工作:
let dateHandler = {
handleDate: (d: Date) => {},
};
dateHandler.handleDate([1, 2, 3]);
// error TS2345: Argument of type 'number[]' is not assignable to parameter of type 'Date'.
// Type 'number[]' is missing the following properties from type 'Date': toDateString, toTimeString, toLocaleDateString, toLocaleTimeString, and 37 more.
什么给了?
【问题讨论】:
标签: typescript