如何在TypeScript类内部使用typeof指定类属性的类型
问题解答
不能直接使用你在示例A中的写法,类的类型注解上下文不支持调用this,但可以通过其他方式实现完全一致的效果。
报错原因
示例B出现Cannot find name 'this'报错的原因很简单:TypeScript的类型注解是编译阶段执行的静态分析逻辑,此时还没有生成类的实例,无法识别指向实例的this关键字。this只能在类方法的执行逻辑、类属性的初始化表达式这类运行时/实例初始化上下文中使用。
两种可行实现方案
方案1:抽离公共类型(最推荐)
把复用的类型单独抽出来定义,可读性和可维护性最高:
type PersonData = { age: number; name: string; } class Person{ data: PersonData = {age:10, name:'John'}; // 直接引用抽离的类型取age属性的类型即可 age: PersonData['age']; }
方案2:直接通过类名引用实例属性类型
如果不想额外定义独立的类型,也可以直接用类名获取对应属性的类型,效果和示例A的typeof data.age完全一致:
class Person{ data: {age:number, name:string} = {age:10, name:'John'}; // Person指代Person类的实例类型,直接逐层取属性类型即可 age: Person['data']['age']; }
内容的提问来源于stack exchange,提问作者Hivaga
相关产品推荐
相关产品推荐

