javascript - Hur utför man en forEach-loop på en variabel definierad som string | Array?
Jag använder Airbnbs TypeScript-stilguide och jag har definierat en typ på det här sättet:
export interface Question {
id: number;
type: 'text' | 'multipleOption' | 'checkBox';
question: string;
answer: string | Array<string>;
}
En variabel som passar detta gränssnitt skapas och jag behöver utföra en forEach på svaret för att kontrollera vissa villkor, men jag får ett lintfel som säger att
Property 'forEach' does not exist on type 'string | string[]'.
Property 'forEach' does not exist on type 'string'
Jag skulle vilja utföra en kontroll som gör det möjligt för mig att utföra denna foreach utan att ändra riktlinjekonfigurationen eller ändra typen i gränssnittets frågedefinition.
Jag har försökt:
if (question.answer.constructor === Array) {
question.answer.forEach(...)
}
if (Array.isArray(question.answer)) {
question.answer.forEach(...)
}
if (typeof question.answer !== 'string') {
question.answer.forEach(...)
}
Men ingen av ovanstående tar bort fodringsfelet.
Svar #1
if (Array.isArray(question.answer)) {
(question.answer as Array<string>).forEach(...)
}
du kan också göra detta för att ha en enhetlig kod
let answers : Array<string> = [];
if (Array.isArray(question.answer)) {
answers = [...question.answer];
} else if (!!question.answer){
answers = [question.answer];
}
answers.forEach(answer => ....)
