0

我想知道我需要做什么才能从我的代码中删除以下错误:

我有这些界面:

export interface ClassifierTO {

   id?: number;
   classifierName?: string;
   userId?: number;
   intents?: Array<IntentTO>;
}

和:

export interface IntentTO {
   id?: number;
   intentName?: string;
   classifierId?: number;
   numberOfSamples?: number;
}

它们是由 自动生成的openapi-generator

class-component当我在vue的方法中使用它时:

 let intents = this.classifier.intents
        .filter(intent => intent.intentName === "test")
        .map(intent => intent.numberOfSamples);

那么vs代码控制台里面的结果是:

Object is possibly 'undefined'

我需要改变什么,这将不再被视为错误?打字稿版本是3.8.3 ,这是tsconfig.json

{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
    "strict": true,
    "jsx": "preserve",
    "importHelpers": true,
    "moduleResolution": "node",
    "experimentalDecorators": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "sourceMap": true,
    "baseUrl": ".",
    "types": [
      "webpack-env"
    ],
    "paths": {
      "@/*": [
        "src/*"
      ]
    },
    "lib": [
      "esnext",
      "dom",
      "dom.iterable",
      "scripthost"
    ]
  },
  "include": [
    "src/**/*.ts",
    "src/**/*.tsx",
    "src/**/*.vue",
    "tests/**/*.ts",
    "tests/**/*.tsx"
  ],
  "exclude": [
    "node_modules"
  ]
}
4

2 回答 2

1

您定义中的问号告诉 typescript 这是可选的并且可以为空。

export interface ClassifierTO {

   id?: number;
   classifierName?: string;
   userId?: number;
   intents?: Array<IntentTO>;
}

您可以删除问号或仅检查是否设置了意图。

于 2020-04-30T12:15:29.850 回答
1

这是因为在您的ClassifierTO界面中,所有属性/键都是可选的。intents?: Array<IntentTO>;告诉 TypeScriptthis.classifier.intents可能返回未定义。

您可以使用 null 合并运算符来确保始终返回一个数组:

let intents = (classifier.intents ?? [])
    .filter(intent => intent.intentName === "test")
    .map(intent => intent.numberOfSamples);

或者,只需更新您的界面,使其intents不是可选键。

于 2020-04-30T12:17:15.080 回答