使用静态类属性时,属性X在类型Y上不存在

时间:2017-10-17 13:07:19

标签: typescript

当我想访问某个模块中的静态类属性时,我遇到了打字稿错误的问题。

假设我想导出一些带静态属性的类:

// 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错误: “属性'apiKey'在类型'AppConfig'上不存在。”,这很奇怪,因为该属性无疑属于这种类型。

2 个答案:

答案 0 :(得分:1)

无法通过类实例访问静态属性。它应该通过类标识符访问,如下所示:

const key = AppConfig.apiKey;

请参阅Static Properties

答案 1 :(得分:0)

主要问题是 config 参数被声明为 AppConfig 的实例:

config: AppConfig;

但事实并非如此。

我建议考虑另一种方法来声明这个参数。 E.g:

interface IApiKeyProvider {
    apiKey: string;
}

interface AppContext {
  config: IApiKeyProvider;
}