2017-10-17 140 views
0

當我想要訪問某些模塊中的靜態類屬性時,出現typecript錯誤的問題。當使用靜態類屬性時,屬性X在類型Y上不存在

比方說,我要出口一些類靜態屬性:

// MODULE 1 
export class AppConfig { 
    static readonly apiKey: string = process.env.API_KEY; 
} 

在模塊2我創建了某個對象的接口;

// MODULE 2 
import { AppConfig } from "./appConfig"; 

interface AppContext { 
    config: AppConfig; 
    ... 
} 

export default class App { 
... 

get ctx(): AppContext { 
    return { 
    config: AppConfig, 
    ... 
    }; 
} 

... 
} 

在模塊3我終於想訪問屬性:

// MODULE 3 
...  
function createContext(app: App): object { 
    return Object.assign(app.ctx, { 
    apiContext: app.ctx.config.apiKey 
    }); 
} 
... 

然後我得到TS ERROR: 「屬性 'apiKey' 上鍵入 'AppConfig的' 不存在」,這很奇怪,因爲這個屬性無疑屬於這種類型。

回答

0

無法通過類實例訪問靜態屬性。應該通過類標識符來訪問這樣的:

const key = AppConfig.apiKey; 

Static Properties

0

的主要問題是,配置參數是聲明爲的AppConfig的一個實例:

config: AppConfig; 

但事實上並非如此。

我會建議在聲明這個參數時考慮另一種方法。例如:

interface IApiKeyProvider { 
    apiKey: string; 
} 

interface AppContext { 
    config: IApiKeyProvider; 
} 
+0

其實,我已經實現了建議的方法,但我認爲應該有另一種方法來實現所需的輸出而不使用接口。我想沒有... –