TypeScript无法推断简单函数返回类型,传字符串仍报错求解
问题原因与解决办法
你遇到的问题核心是:TypeScript对函数返回类型的推断是基于函数声明的参数类型,而非单次调用时传入的具体值。你的sayHi函数参数声明为string | null,所以TS会固定把它的返回类型推断为string | null——哪怕你这次传的是确定的字符串,它依然会认为返回值可能是null,因此赋值给string类型的变量会触发类型不兼容的报错。
下面是几种可行的解决方式:
方案1:使用函数重载
通过重载明确不同入参对应的返回类型,让TS能根据调用时的入参类型精准推断返回值:
export function sayHi(text: string): string; export function sayHi(text: null): null; export function sayHi(text: string | null) { return text ? "Hello" : null; } const msg: string = sayHi("hi"); // 不再报错,TS知道返回string
方案2:使用泛型条件类型
让函数的返回类型根据入参的具体类型动态推导:
export function sayHi<T extends string | null>(text: T): T extends string ? string : null { return text ? "Hello" : null as T extends string ? string : null; } const msg: string = sayHi("hi"); // 正确推断返回string const emptyMsg = sayHi(null); // 自动推断返回null
方案3:非空断言(不推荐)
如果你能100%确定本次调用不会返回null,可以用!绕过TS的类型检查,但这种方式不安全,一旦入参逻辑变化容易引发运行时问题:
const msg: string = sayHi("hi")!;
内容的提问来源于stack exchange,提问作者Ivo Ivanov
相关产品推荐
相关产品推荐

