我想写es6类:
class SomeClass {
static prop = 123
method() {
}
}
如何在不使用prop
的情况下从method()
访问静态SomeClass
?在es6中可以使用this.constructor
完成,但在typescript this.constructor.prop
中会导致错误“ TS2339:属性'prop'在类型'Function'上不存在”。
答案 0 :(得分:11)
但是在打字稿中,this.constructor.prop会导致错误" TS2339:Property' prop'类型'功能'"。
上不存在
Typescript不会将 while (true) {
// Get a number from the user
System.out.print("Enter an integer to find the factorial: ");
int number = keyboard.nextInt();
if (Pattern.matches("\\d+", String.valueOf(number))) {
if (Integer.valueOf(number) == 0)
System.exit(0);
// Display the factorial
System.out.println(number + "! is " + factorial(number));
}
else
System.out.println("Error");
}
的类型推断为constructor
之外的任何内容(毕竟......构造函数可能是一个子类)。
所以使用断言:
Function
答案 1 :(得分:3)
微软程序员谈论这个,但没有一个好方法来输入constructor
。您可以先使用此提示。
class SomeClass {
/**
* @see https://github.com/Microsoft/TypeScript/issues/3841#issuecomment-337560146
*/
['constructor']: typeof SomeClass
static prop = 123
method() {
this.constructor.prop // number
}
}
答案 2 :(得分:0)
它有点脏,但这段代码适用于我Typescript Playground:
class SomeClass {
static prop = 123;
constructor() {
console.log(this.constructor["prop"]);
}
}
var a = new SomeClass();
答案 3 :(得分:0)
通常简单的方法是:
class SomeClass {
static prop = 123
method() {
console.log(SomeClass.prop) //> 123
}
}
请注意,如果您使用此功能,SomeClass
的子类将直接访问SomeClass.prop
而不是SomeSubClass.prop
。如果希望子类访问自己的同名静态属性,请使用basarat的方法。
答案 4 :(得分:0)
通过this.constructor
访问静态属性(而不是像通常那样仅使用SomeClass.prop
)仅在不知道类名且必须使用{{1 }}。 this
不起作用,所以这是我的解决方法:
typeof this
或者,在课外使用时:
class SomeClass {
static prop = 123;
method() {
const that = this;
type Type = {
constructor: Type;
prop: number; //only need to define the static props you're going to need
} & typeof that;
(this as Type).constructor.prop;
}
}
答案 5 :(得分:0)
我想您将来希望扩展此类。所以最好这样做:
class SomeClass<T extends typeof SomeClass = typeof SomeClass> {
static prop = 123
method() {
(this.constructor as T).prop;
}
}