如何使用类型别名给TypeScript类的非箭头方法标注类型?
如何使用类型别名给TypeScript中类的非箭头函数方法标注类型?
使用箭头函数形式定义类方法时,可以直接给类属性加类型标注绑定类型别名,示例代码如下:
type FooFn = () => boolean class ClassA { public foo: FooFn = () => true; }
如果要给普通非箭头形式的类方法实现同等的类型约束效果,有两种常用实现方式:
- 方法签名局部标注
借助TS内置工具类型提取类型别名的参数、返回值类型,直接标注在普通方法上,保证和类型别名定义完全一致:type FooFn = () => boolean class ClassB { // 无参数场景直接提取返回值类型,有参数可以搭配Parameters<FooFn>展开参数类型 public foo(): ReturnType<FooFn> { return true; } } - 类结构整体约束
通过implements关键字让类实现包含目标方法签名的类型/接口,TS会自动校验类中普通方法的签名是否和类型别名匹配,不需要在方法上重复书写类型定义:type FooFn = () => boolean interface ClassWithFoo { foo: FooFn } class ClassB implements ClassWithFoo { public foo() { // 签名不匹配时TS会直接抛错,比如此处return 1就会提示类型不合法 return true; } }
重要提示:普通类方法是定义在类原型上的方法成员,TypeScript语法层面不支持像箭头函数类属性那样,直接在方法名后加
: FooFn做类型标注,强行书写会触发语法错误。
内容的提问来源于stack exchange,提问作者Asghwor
相关产品推荐
相关产品推荐

