TypeScript中根据null参数收窄返回类型的报错解决
问题解决
核心错误点
- 类型判断逻辑错误:
typeof param === null是无效判断——typeof null的返回值是"object",永远不会等于null,正确的null值判断应该用param === null。 - 返回类型定义错误:原函数签名里的
typeof param是固定的string | null,所以null extends typeof param ? null : string会恒等于null,导致TypeScript认为函数必须返回null,这就是return ""报错的根源。
正确实现方式
如果想要让返回类型根据参数是否为null动态推导,需要用泛型条件类型实现:
export const foo1 = <T extends string | null>(param: T): T extends null ? null : string => { if (param === null) { // 类型断言帮助TypeScript识别分支返回类型 return null as T extends null ? null : string; } return ""; };
如果不需要严格的条件类型推导,直接声明返回类型为string | null,TypeScript也能通过类型守卫自动识别分支:
export const foo1 = (param: string | null): string | null => { if (param === null) { return null; } return ""; };
效果验证
- 传入
null时,TypeScript会推断返回类型为null - 传入字符串时,TypeScript会推断返回类型为
string
内容的提问来源于stack exchange,提问作者Nate Glenn
相关产品推荐
相关产品推荐

