2017-10-17 94 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

其实,我已经实现了建议的方法,但我认为应该有另一种方法来实现所需的输出而不使用接口。我想没有... –