【发布时间】:2019-09-30 06:03:59
【问题描述】:
(我正在使用严格的空值检查)
我有以下箭头函数,具有重载类型:
type INumberConverter = {
(value: number): number;
(value: null): null;
};
const decimalToPercent: INumberConverter = (value: number | null): number | null => {
if (!value) {
return null;
}
return value * 100;
};
根据其他问题 (Can I use TypeScript overloads when using fat arrow syntax for class methods?) 的理解,这应该是有效的。永远不会出现以下错误:
TS2322: Type '(value: number | null) => number | null' is not assignable to type 'INumberConverter'. Type 'number | null' is not assignable to type 'number'. Type 'null' is not assignable to type 'number'
如果我定期编写这个函数(使用function 关键字):
function decimalToPercent(value: null): null;
function decimalToPercent(value: number): number;
function decimalToPercent(value: number | null): number | null {
if (!value) {
return null;
}
return value * 100;
}
它可以正常工作。
我需要使用箭头函数,所以 this 不会改变,我需要这个重载,所以 typescript 知道 decimalToPercent(1) 不能为空。
为什么它不能按照我的方式工作,我该如何解决?
【问题讨论】:
标签: typescript overloading arrow-functions