TypeScript类方法中this参数的两种调用行为差异解析
问题解答
报错信息翻译
类型为"void"的'this'上下文无法赋值给类型为'MyClass'的方法'this'。(2684)
两种调用结果不同的原因
TypeScript采用结构类型系统——只要两个对象的属性、方法类型结构匹配,就会被视为类型兼容。而你给方法指定的this: MyClass类型检查,核心是看调用该方法时的上下文对象是否符合MyClass的结构,而非方法原本属于哪个类实例。
obj2.getName()无报错:
调用obj2.getName()时,this指向obj2。obj2拥有x: string属性,和MyClass的结构完全匹配,TypeScript判定它满足MyClass的类型要求,因此不会报错。a()报错:
把obj1.getName赋值给变量a后,调用a()时,this的上下文在严格模式下是undefined(对应TypeScript里的void类型),完全不符合方法指定的MyClass类型,所以触发报错。
说白了,TypeScript只在意调用方法时this实际指向的对象有没有符合要求的结构,不管方法原本属于哪个类。
内容的提问来源于stack exchange,提问作者Rajat Jain
相关产品推荐
相关产品推荐

