Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 获取联合数组的值_Typescript - Fatal编程技术网

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);
}