我不想宣告accountHandler,因為any這不是好習慣。當您必須將其分配給建構式中的類時,有什么更好的方法來創建類變數。
main.ts
{
private accountHandler: any= {};
private requestLOB: string[] = [];
constructor() {
if (process.env.ENABLEBackendSwitch === "true") {
this.accountHandler = new AccountBalanceHandlerV2();
} else {
this.accountHandler = new AccountBalanceHandler();
}
}
uj5u.com熱心網友回復:
而不是any你可以使用AccountBalanceHandlerV2 | AccountBalanceHandler. 但實際上您甚至不需要設定型別,因為 TypeScript 會根據您在建構式中分配的內容為您推斷值(只要您洗掉默認分配):
class A {
private accountHandler;
constructor() {
if (process.env.ENABLEBackendSwitch === "true") {
this.accountHandler = new AccountBalanceHandlerV2();
} else {
this.accountHandler = new AccountBalanceHandler();
}
}
}
accountHandler被推斷為 type AccountBalanceHandlerV2 | AccountBalanceHandler。
uj5u.com熱心網友回復:
Typescript 實際上會推斷在建構式中初始化的欄位型別。因此,如果您沒有任何注釋,則會對其進行推斷。
class X {
private accountHandler;
// ^? X.accountHandler: AccountBalanceHandlerV2 | AccountBalanceHandler
constructor() {
if (process.env.ENABLEBackendSwitch === "true") {
this.accountHandler = new AccountBalanceHandlerV2();
} else {
this.accountHandler = new AccountBalanceHandler();
}
}
}
游樂場鏈接
但最好的做法是明確說明型別:
class X {
private accountHandler: AccountBalanceHandlerV2 | AccountBalanceHandler
constructor() {
if (process.env.ENABLEBackendSwitch === "true") {
this.accountHandler = new AccountBalanceHandlerV2();
} else {
this.accountHandler = new AccountBalanceHandler();
}
}
}
游樂場鏈接
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/435671.html
標籤:javascript 节点.js 打字稿
