我在项目中签入了一个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"
]
}