Я использую библиотеку под названием EnvObj , чтобы помочь мне настроить переменные окружения в проекте Node, написанном на Typescript.Мой файл env.ts выглядит так:
import env = require('envobj')
export interface Env {
"PORT": number,
"PG_CONNECTION" : string,
"REDIS_CONNECTION": string,
"SERVER_HOST": string,
"SERVER_SECURE": boolean,
"COOKIE_KEY": string,
"GOOGLE_API_CLIENT_ID": string,
"GOOGLE_API_CLIENT_SECRET": string,
"GOOGLE_API_DOMAIN": string,
"CLEARBIT_API_KEY": string
}
export default env <Env>({
"PORT": 3000,
"PG_CONNECTION": String,
"REDIS_CONNECTION": String,
"SERVER_HOST": 'localhost:3000',
"SERVER_SECURE": false,
"COOKIE_KEY": String,
"GOOGLE_API_CLIENT_ID": String,
"GOOGLE_API_CLIENT_SECRET": String,
"GOOGLE_API_DOMAIN": '',
"CLEARBIT_API_KEY": String
})
Когда я запускаю код, я получаю следующую ошибку:
src/support/env.ts:16:20 - error TS2344: Type 'Env' does not satisfy the constraint 'ValidResult'. Index signature is missing in type 'Env'.
Если я копаю в envobj, интерфейс ValidResult выглядит следующим образом:
interface ValidResult {
[key: string]: string | number | boolean
}
Который кажется совместимым с интерфейсом Env, как написано.
Добавление подписи индекса к объекту Env дает мне эту ошибку:
src/support/env.ts:17:26 - error TS2345: Argument of type '{ "PORT": number; "PG_CONNECTION": StringConstructor; "REDIS_CONNECTION": StringConstructor; "SER...' is not assignable to parameter of type 'Config<Env>'.
Property '"PORT"' is incompatible with index signature.
Type 'number' is not assignable to type 'never'.
17 export default env <Env>({
~
18 "PORT": 3000,
~~~~~~~~~~~~~~~
...
27 "CLEARBIT_API_KEY": String
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
28 })
~
Есть идеи, где я ошибаюсь?