2

我正在使用 airbnb typescript 样式指南,并且我定义了这样的类型:

export interface Question {
  id: number;
  type: 'text' | 'multipleOption' | 'checkBox';
  question: string;
  answer: string | Array<string>;
}

创建了一个适合此接口的变量,我需要在答案上执行 forEach 以检查某些条件,但我收到一个 linting 错误说

Property 'forEach' does not exist on type 'string | string[]'.
  Property 'forEach' does not exist on type 'string'

我想执行一项检查,使我能够在不修改指南配置或更改接口问题定义中的类型的情况下执行此 foreach。

我努力了:

if (question.answer.constructor === Array) {
    question.answer.forEach(...)
}

if (Array.isArray(question.answer)) {
    question.answer.forEach(...)
}
if (typeof question.answer !== 'string') {
    question.answer.forEach(...)
}

但是以上都没有消除衬里错误。

4

1 回答 1

4
if (Array.isArray(question.answer)) {
    (question.answer as Array<string>).forEach(...)
}

你也可以这样做以获得统一的代码

    let answers : Array<string> = [];
    if (Array.isArray(question.answer)) {
        answers = [...question.answer];
    } else if (!!question.answer){
        answers = [question.answer];
    }

    answers.forEach(answer => ....)
于 2021-05-25T00:31:17.710 回答