Constructor TypeScript类成员速记错误?
在我使用TypeScript语言时,我被类成员速记语法和继承的用法弄糊涂了。假设您拥有以下有效的TypeScript,其中包含两个语义意图类和一个具有一个属性的接口:Constructor TypeScript类成员速记错误?,constructor,typescript,Constructor,Typescript,在我使用TypeScript语言时,我被类成员速记语法和继承的用法弄糊涂了。假设您拥有以下有效的TypeScript,其中包含两个语义意图类和一个具有一个属性的接口: class Person1 implements HasName { constructor(public name: string) {} } class Person2 implements HasName { public name : string; const
class Person1 implements HasName {
constructor(public name: string) {}
}
class Person2 implements HasName {
public name : string;
constructor(name: string) {
this.name = name;
}
}
interface HasName {
name : string;
}
现在,如果您尝试在HasName接口中重命名'name'属性,则只有Person2中的成员将被正确重命名,而在Person1中,您将收到一个TypeScript错误,说明它不再实现HasName
有了这种行为,就不可能安全地为类成员使用速记语法:-/
这是一个错误还是有意的?就我而言,重构操作永远不会导致编译器出现错误。相反,它也应该重命名Person1中的ShortHand成员,这听起来像是一个bug。如果您描述的是真的,那么我同意这是一个bug。但您必须区分语言和VisualStudio插件。您的bug出现在visual studio插件的重构部分,而不是语言本身。请注意,由于最新版本(0.8.0)是alpha版本,有许多未实现的bug。编译器正确地识别了这一点,因此TypeScript语言或编译器中没有bug。我没有使用visual studio,我只是在他们页面上的TypeScript游乐场上玩。此外,如果您单击HasName界面中的name字段,您将看到Person1中的name字段不会像其他name成员那样高亮显示。这是相同的。您所描述的是一个用来进行重构的工具,唯一的区别是它在浏览器中。这是一个bug,但不在语言或编译器中。