Typescript конвертировать строку в JSON в строковый литерал - PullRequest
0 голосов
/ 24 января 2019

В моем проекте зарегистрирован файл конфигурации 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"
  ]
}
...