Почему метод pu sh () подчеркнут? - PullRequest
2 голосов
/ 13 марта 2020

Итак, привет для первого, я попытался сделать маленькую воображаемую корзину для упражнений на TypeScript. Так что я сделал, и теперь у меня есть вопрос, вот код.

class Warenkorb {
    liste:string[];

    add(produkt):void{
        this.liste.push(produkt);
    }
}

Это первый, он отлично работает без подчеркивания.

class Warenkorb {
    liste:string|number[];

    add(produkt):void{
        this.liste.push(produkt);
    }
}

Так что это проблема. Когда я хочу число или строку, метод pu sh подчеркивается красным, это не проблема для упражнения, потому что продукты должны быть только строками, но я также хочу знать, почему это так.

И извините за плохие имена переменных я немец / австриец: D

Ответы [ 3 ]

4 голосов
/ 13 марта 2020

Оба из них должны показывать вам ошибки, потому что produkt неявно имеет тип any.

Проблема с list заключается в том, что это string или number[]. Если вы хотите, чтобы он разрешал как строки, так и числа, вам нужно (string | number)[].

Вам также нужно инициализировать liste пустым массивом.

Итак:

class Warenkorb {
    liste: (string|number)[] = [];
// −−−−−−−−^−−−−−−−−−−−−−^   ^^^^−−−−−−−−−−−−
    add(produkt: string|number):void{
// −−−−−−−−−−−−^^^^^^^^^^^^^^^
        this.liste.push(produkt);
    }
}
2 голосов
/ 13 марта 2020

В записке, которую вы написали, написано: liste имеет тип string или number[].

Это то, что вы пытались сказать

class Warenkorb {
  liste: (string|number)[];

  add(produkt: string|number):void {
    this.liste.push(produkt);
  }
}

В качестве примечания, если вы должны были включить строгий режим. Вы получите еще одну ошибку. Тот, который сказал бы, что "liste" не определен в конструкторе. Вы должны либо использовать liste: (string|number)[] = [], либо создать конструктор и назначить его там.

2 голосов
/ 13 марта 2020

Синтаксис во втором примере неверен, вам нужно добавить массив для обоих типов данных в объединении, как показано ниже:

class Warenkorb {
liste:string[]|number[] = [];

add(produkt):void{
    this.liste.push(produkt);
}

Теперь вы определяете, что это будет либо массив строк, либо массив числа и инициализировать с пустым массивом, в противном случае он будет иметь значение по умолчанию неопределенное, и произойдет ошибка.

В вашем случае вы определяете его как строку или массив чисел. Таким образом, метод pu sh не существует в строках.

string|number[]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...