gpt4 book ai didi

typescript - 为什么不能在属性方法中访问静态成员,而在原型(prototype)方法中可以访问?

转载 作者:行者123 更新时间:2023-12-04 13:12:17 28 4
gpt4 key购买 nike

有人可以帮助我理解为什么从 Typescript 中的属性方法访问静态成员会出错吗?它可以在普通 ES6 中正常工作,并且可以作为适当的原型(prototype)方法。

class FooBar {
static v = 123;

static foo = () => this.v; // this is an error in TS (but ok in ES6)

static bar() {
return this.v; // but this is ok in TS??
}
}
这是错误,它似乎将函数体中的代码视为属性初始值设定项本身:
apptest2.ts:40:24 - error TS2334: 'this' cannot be referenced in a static property initializer.

40 static foo = () => this.v;
~~~~
如果代码更像 static foo = this.v,错误就会有意义。 ,但作为函数回调的一部分,将其视为类初始化阶段的一部分是没有意义的,其中 this无法定义...无论如何,这也适用于 ES6这增加了我对为什么这是一个错误以及它为什么在 bar() 中起作用的困惑。但不在 foo() .

最佳答案

我今天遇到了这个问题,我注意到以下几点:
如果您使用箭头函数,则需要引用 ClassName而不是 this

class FooBar {
static v = 123;
static fooArrow = () => FooBar.v; //works
static foo () {this.v}; //works
}
这似乎是 Typescript 中的一个已知问题,并且已经有 long term discussions on a possible fix .由于 this 的问题,我认为暂时避开类中的箭头函数是个好主意。上下文是绑定(bind)的。

关于typescript - 为什么不能在属性方法中访问静态成员,而在原型(prototype)方法中可以访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63937001/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com