Typescript 获取联合数组的值
给出了以下接口:Typescript 获取联合数组的值,typescript,Typescript,给出了以下接口: export interface ContainsArrayOfUnions { unionProp: Array<"TRUE" | "FALSE" | "MAYBE">; } 我的问题 如何创建联合数组的值类型 编辑添加tsconfig.json { "compilerOptions": { "module": "esnext", "target": "es5", "moduleResolution": "node", "
export interface ContainsArrayOfUnions {
unionProp: Array<"TRUE" | "FALSE" | "MAYBE">;
}
我的问题
如何创建联合数组的值类型
编辑添加tsconfig.json
{
"compilerOptions": {
"module": "esnext",
"target": "es5",
"moduleResolution": "node",
"pretty": true,
"allowJs": true,
"strict": true,
"strictNullChecks": true,
"noImplicitThis": false,
"noImplicitAny": false,
"allowSyntheticDefaultImports": true,
"noStrictGenericChecks": true,
"skipLibCheck": true,
"baseUrl": "./src",
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"typeRoots": [
"./node_modules/@types",
"./src/types"
],
"downlevelIteration": true,
"resolveJsonModule": true,
"noEmitHelpers": true,
"importHelpers": true,
"sourceMap": true,
"removeComments": false,
"lib": [
"dom",
"esnext",
"esnext.array",
"dom.iterable"
],
"strictPropertyInitialization": false,
"noErrorTruncation": true,
"paths": {
"@coreStyles/*": ["./src/assets/styles/*"]
}
},
"include": [
"./src/**/*"
],
"exclude": [
"node_modules"
]
}
我建议
type ArrayType = "TRUE" | "FALSE" | "MAYBE";
export interface ContainsArrayOfUnions {
unionProp: ArrayType[]
}
checkValue(param1: ContainsArrayOfUnions["unionProp"], param2: ArrayType) {
return param1.includes(param2);
}
或者使用您已有的代码:
checkValue(param1: ContainsArrayOfUnions["unionProp"], param2: "TRUE" | "FALSE" | "MAYBE") {
return param1.includes(param2);
}
更新:
有点老套,但很管用
checkValue<T extends ContainsArrayOfUnions["unionProp"][0]>(param1: ContainsArrayOfUnions["unionProp"], param2: T) {
return param1.includes(param2);
}
是的,当然我可以自己定义类型。在我的现实生活场景中,该类型更为复杂和动态,它是由一个不断变化的swagger.json.Nice想法生成的,但由于1而无法工作。类型TRUE | FALSE |可能[]和2上不存在属性“0”。T可能不能指定为类型。这很奇怪。您使用的是什么版本的typescript?您也可以尝试,但不要这样认为,因为我使用的[0]不起作用typescript@3.5.3. 这可能与我的tsconfig.json有关吗?我在帖子中添加了我的配置。
checkValue<T extends ContainsArrayOfUnions["unionProp"][0]>(param1: ContainsArrayOfUnions["unionProp"], param2: T) {
return param1.includes(param2);
}