我定义了一个泛型方法,其泛型类型由其中一个参数决定:
myMethod<T>(param1: number, param2: T): T {
return param2;
}
现在,我想为参数设置一个默认值,然后 T 将由默认值的类型决定:
myMethod<T>(param1: number, param2: T = 'myDefaultString'): T {
return param2;
}
但这不会编译,因为它期望“string”匹配 T 而不是确定 T 为“string”。
一个解决方案是这样写:
myMethod<T>(param1: number, param2: T = <any>'myDefaultString'): T {
return param2;
}
但是我需要在调用站点明确指定类型:
const val: string = this.myMethod<string>();
我考虑的另一个解决方案是编写第二个函数,不带默认参数:
myMethod<T>(param1: number, param2: T): T {
return param2;
}
myMethodDefault(param1: number): string {
return myMethod(param1, 'myDefaultString');
}
但是我需要一个不同的名字,这让我很困扰。
有更好的方法吗?
最佳答案
类型部分可以使用默认泛型类型参数来实现(自 TypeScript 2.3 起):
class Hey {
myMethod<T = string>(arg1: number, arg2?: T): T {
if (arg2 === undefined)
// have to handle default parameter manually
return "myDefaultString" as any as T;
return arg2;
}
}
const h = new Hey();
// n1: string;
const n1 = h.myMethod(1);
// n2: typeof "mm"
const n2 = h.myMethod(2, "mm");
// n3: { a: number }
const n3 = h.myMethod(3, { a: 1 });
关于typescript - 确定泛型方法类型的默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44802783/