js-quantities库具有swiftConverter()方法,该方法生成将数字从一个单位制转换为另一种单位制(例如,英尺到米)的函数。该函数可以使用number
或number[]
,并分别返回转换后的number
或number[]
。
在@types/js-quantities
中定义的接口是:
interface Converter {
(sourceValue: number): number;
(sourceValues: number[]): number[];
}
我想写一个返回符合此接口值的方法。我该怎么做?
您不能简单地编写形式为(value: number | number[]): number | number[]
的函数,因为映射number | number[] => number | number[]
的函数与映射number => number
和number[] => number[]
的函数有细微的区别。 / p>
答案 0 :(得分:1)
具有重载的函数将满足该接口:
interface Converter {
(sourceValue: number): number;
(sourceValues: number[]): number[];
}
function convert(sourceValue: number): number;
function convert(sourceValues: number[]): number[];
function convert(sourceValues: number | number[]): number | number[] {
return sourceValues;
}
let conv: Converter;
conv = convert;
实现签名仍然可以自由地做不安全的事情,但这就是重载的本质。
或者,如果您愿意,可以有一个实现接口的方法。由于此接口具有函数签名,因此一个类无法实现它,但是该类的方法可以提供所有必要的重载。
class X {
convert(sourceValue: number): number;
convert(sourceValues: number[]): number[];
convert(sourceValues: number | number[]): number | number[] {
return sourceValues;
}
}
let conv: Converter;
conv = new X().convert;