请记住noImplicitAny
已开启。
有一个重载函数的简单示例:
interface FUNC {
(x: number, f: (y: number) => number): number;
(x: string, f: (y: string) => string ): string;
}
const func: FUNC = function(x, func) {
return func(x);
}
const result = func('dfd', x => x + '3');
您将获得x
和func
隐式拥有任何类型。 (使用this link并打开" noImplicitAny"看看它
您会给x
和func
哪种类型? (现在我给他们明确了,我认为那里有一个更好的解决方案,也许我错了)
提前致谢!!
答案 0 :(得分:1)
您可以使用泛型:
const func: FUNC = function<T>(x: T, func: (x: T) => T) {
return func(x);
}
答案 1 :(得分:0)
如果func
仅接受数字和字符串,则应为其提供联合类型:
x: number | string
答案 2 :(得分:0)
如果您的重载仅因类型而异,则可以修改您的接口以获得泛型类型参数:
interface FUNC<T> {
(x: T, f: (y: T) => T): T;
}
并使用它:
// Parameter types will be inferred based on type parameter.
const numberFunc: FUNC<number> = function(x, func) {
return func(x);
}
const stringFunc: FUNC<string> = function(x, func) {
return func(x);
}
const numberResult = numberFunc(1, x => x + 1); // Can't pass strings here
const stringResult = stringFunc("1", x => x + "1"); // Can't pass numbers here