Переменная как тип интерфейса или интерфейса [] - PullRequest
0 голосов
/ 07 ноября 2019

В этом коде:

insert1(data: iFlower) {
    ...
    return data;
}

insert2(data: iFlower[]) {
    ...
    return data;
}

public insert (data: iFlower | iFlower[]) {
    if (data as iFlower) {
        return this.insert1(data as iFlower);
    }
    else if (data as iFlower[]) {
        return this.insert2(data as iFlower[]);
    }

когда я вызываю функцию insert(), в зависимости от типа переменной, data, я хочу вызвать один или другой метод. Но в этом случае, если data является массивом объектов (типа iFlower[]), он все равно входит в функцию insert1 ... Или лучше сказать, даже если data имеет значение iFlower или iFlower[] типа, он будет вызывать тот же метод.

Как я могу решить эту проблему? (

1 Ответ

1 голос
/ 07 ноября 2019

as - это оператор машинописного текста, который можно использовать для типов машин. Он не делает никаких проверок во время выполнения, поэтому он бесполезен. Ваш код в основном делает это во время выполнения:

 if(data /*as iFlower*/) // data is truthy, enters branch

Вы можете использовать Array.isArray, чтобы определить, является ли переданное значение массивом:

 if (Array.isArray(data)) // iFlower[]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...