TypeScript 在构造函数参数中声明属性'...'的语言服务建议

t3psigkw  于 5个月前  发布在  TypeScript
关注(0)|答案(1)|浏览(48)

搜索词

  • typescript declare property in constructor
  • typescript language service declare property in constructor

建议

当在类方法中访问不存在的属性 x 时,ts language service 目前建议的一种修复方法是:
Declare property x
这将向类中添加属性 x
如果还能有 Declare property x in constructor arguments 就更好了。它可以默认使用 private 访问修饰符。

使用场景

虽然它通常很有用,但在开发使用构造函数注入(constructor injection)来连接依赖项的DI框架(如Angular)的应用程序时,它变得特别方便。

示例

检查清单

我的建议满足以下准则:

  • 这不会对现有的TypeScript / JavaScript代码造成破坏性更改
  • 这不会改变现有JavaScript代码的运行时行为
  • 这可以在不根据表达式的类型发出不同的JS的情况下实现
  • 这不是一个运行时特性(例如新的表达式级语法)
htrmnn0y

htrmnn0y1#

当前的代码修复与 --strictPropertyInitialization 不兼容。(如果类型是 any,那么它是兼容的,但请参见 #28056 。)即使没有 --strictPropertyInitialization,它只是添加了一个属性声明,这个属性可能永远不会写在任何地方,所以它正在积极地使你的代码更不正确。因此,也许我们应该默认这样做,而不是添加一个新的选项。例外是在写访问时。

class C {
}
new C().x;

应该改为:

class C {
    constructor(public x: any) {}
}
new C().x;

或者,如果存在现有的构造函数,它可以添加一个新的参数。
我认为这应该默认使用 publicreadonly,因为代码修复可能会在类之外触发。

相关问题