鉴于此功能:
myFunc(object: string | null): string | null {}
我希望当对象为string
时,此函数的返回类型为string
,而当对象的类型为string | null
时,返回类型为string | null
。< / p>
我试过了:
myFunc<T extends string | null>(object: T): T {
return "returnValue"; //Type '"returnValue"' is not assignable to type 'T'.
}
和
myFunc<T extends string & null>(object: T): T {
return "returnValue"; //Type '"returnValue"' is not assignable to type 'T'.
}
两者都产生相同的编译错误。我没有找到正确的语法来执行此操作。
答案 0 :(得分:6)
我无法相信我实际上会建议超载,因为我花了很多时间来解释如何避免大部分问题......但是过载将是模拟这种情况的好方法! / p>
class Example {
myFunc(obj: string): string;
myFunc(obj: string | null): string | null;
myFunc(obj: string | null): string | null {
return "returnValue";
}
}
function test(a: string | null, b: string) {
const example = new Example();
// resultA: string | null
const resultA = example.myFunc(a);
// resultB: string
const resultB = example.myFunc(b);
}
在上面的示例中,返回类型映射到输入类型,因此resultA
和resultB
具有预期类型,如果您正在运行启用严格空检查