TypeScript 如何为箭头函数应用已定义的泛型函数类型
报错原因说明
- 第一种写法报错是因为你使用
FlipFunction<T1, T2>时,T1、T2还没有在类型标注的作用域内声明,TypeScript无法识别这两个类型名,因此抛出Cannot find name 'T1'错误。 - 第二种写法报错是因为泛型参数列表
<T1, T2>和后续的FlipFunction之间缺少空格,TypeScript语法解析失败,因此提示'(' expected。
正确写法
普通TS环境写法
只需要在泛型参数列表和类型别名之间添加空格即可:
export const flip: <T1, T2> FlipFunction<T1, T2> = <T1, T2>(A: T1, B: T2) => [B, A];
TSX环境写法
如果是在TSX文件中使用,需要给泛型参数列表添加尾逗号,避免被识别为JSX标签:
export const flip: <T1, T2,> FlipFunction<T1, T2> = <T1, T2,>(A: T1, B: T2) => [B, A];
不可修改泛型类型定义的场景适配
针对你提到的已经提前定义好、无法修改的泛型接口(比如示例中的Component<C,T>),可以用完全相同的逻辑绑定类型:
// 原有已定义、不可修改的泛型接口 interface Component<C,T> extends ComponentBase<ComponentProps<C,T>> {} // 绑定到箭头函数(非TSX环境) export const MyComponent: <C, T> Component<C, T> = <C, T>(props: ComponentProps<C, T>) => { // 组件实现逻辑 } // 绑定到箭头函数(TSX环境) export const MyComponent: <C, T,> Component<C, T> = <C, T,>(props: ComponentProps<C, T>) => { // 组件实现逻辑 }
内容的提问来源于stack exchange,提问作者Alasdair McLeay
相关产品推荐
相关产品推荐

