Typescript将json中的字符串转换为字符串文字

时间:2019-01-24 17:16:18

标签: typescript types string-literals

我在项目中签入了一个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文件的类型。在此typescript issue中,这被解释为扩展类型。不过,我想知道是否可以将字符串转换为字符串文字。我发现了一个示例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"
  ]
}

0 个答案:

没有答案