[英]Typescript initialize static variable of a class type
我有兩個類Foo
和Bar
。 在Bar
類中,我有一個名為myFoo
的靜態變量,我希望它自動初始化:
class Foo {
}
class Bar {
static myFoo: Foo = new Foo();
}
但是,我收到此錯誤:
未捕獲的 ReferenceError: Foo 未定義
如果我在Bar
的構造函數中初始化該靜態變量,則它可以正常工作:
class Bar {
static myFoo: Foo;
constructor() {
Bar.myFoo = new Foo();
}
}
這是為什么? 當我嘗試直接初始化靜態變量myFoo
時,我做錯了什么?
您絕對不想做第二件事,因為每次構建新 Bar 時都會覆蓋myFoo
而您當然不希望那樣做。
您在這里遇到的是運行時問題,而不是編譯時問題。 必須在加載Bar
類之前加載Foo
類,否則靜態初始化程序將失敗。 如果兩個類都按上述順序在一個文件中,它就可以工作。 如果這些類位於單獨的文件中並且您告訴 TypeScript 編譯為單個文件,它應該為您找出正確的順序(盡管該區域存在錯誤)。 如果您要編譯為單獨的文件,則需要以正確的順序在頁面上包含腳本以滿足依賴性。
您可以在類聲明之后立即調用 initialize :
class MyClass {
static initialize() {
// Initialization
}
}
MyClass.initialize();
這需要 JQuery,但我所做的就是擁有相當於“靜態構造函數”的方法。
namespace SomeNamespace {
$(() => SomeClass.StaticConstructor());
export class SomeClass {
public static StaticConstructor() {
}
}
}
例如,這也可用作應用程序的“入口點”。
namespace SomeNamespace {
$(() => SomeClass.Start());
export class SomeClass {
private static sInstance: SomeClass;
public static Start() {
SomeClass.sInstance = new SomeClass();
}
}
}
正如 Jeffery Grajkowski 所說,您的第二種方法是不正確的。 你可以在定義中初始化。
class Bar {
static myFoo: Foo = new Foo();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.