В моем проекте зарегистрирован файл конфигурации json, который выглядит примерно так:
{
"flag": "one"
}
и я хочу проверить тип этого файла json, с типом, который включает строковые литералы.
import someconfig from './configs/someconfig.json'
type Config = {
flag: 'one' | 'two'
}
const config: Config = someconfig
, что приводит к этой ошибке:
error TS2322: Type '{ "flag": string; }' is not assignable to type 'Config'.
Types of property 'flag' are incompatible.
Type 'string' is not assignable to type '"one" | "two"'.
const config: Conf = someconfig
~~~~~~
Это означает, что я не могу проверить типы любых файлов json по типу, который использует литералы. Это объясняется как расширение типов в этой проблеме машинописи . Тем не менее, я хочу знать, могу ли я как-то преобразовать строки в строковые литералы. Я нашел пример https://basarat.gitbooks.io/typescript/docs/types/literal-types.html, который как бы расширяет типы от строк до строковых литералов. Можно ли сделать это из файла JSON?
мой файл tsconfig.json:
{
"compilerOptions": {
"outDir": "./lib/",
"sourceMap": true,
"noImplicitAny": true,
"strictNullChecks": true,
"lib": ["es2015", "es2016", "es2017"],
"module": "commonjs",
"moduleResolution": "node",
"target": "es2017",
"allowJs": true,
"esModuleInterop": true,
"resolveJsonModule": true,
"allowSyntheticDefaultImports": true
},
"include": [
"src/**/*.ts",
"examples/**/*.ts",
"custom.d.ts",
"testing/**/*.ts"
]
}