当我想访问某个模块中的静态类属性时,我遇到了打字稿错误的问题。
假设我想导出一些带静态属性的类:
// 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'上不存在。”,这很奇怪,因为该属性无疑属于这种类型。
答案 0 :(得分:1)
答案 1 :(得分:0)
主要问题是 config 参数被声明为 AppConfig 的实例:
config: AppConfig;
但事实并非如此。
我建议考虑另一种方法来声明这个参数。 E.g:
interface IApiKeyProvider {
apiKey: string;
}
interface AppContext {
config: IApiKeyProvider;
}