Demigodd
@Demigodd

Как установить тип только string или только number?

Есть такой кусок кода:

data: IData[] = [];

get ids(): (string | number)[] {
  return data.map((n) => n.id);
}

export interface IData {
  id: string | number;
  name: string;
}

/** (1) **/
// Set data only string ID.

doSomething1(this.ids);

doSomething1 = (ids: string[]) => {
  // do something...
}

/** (2) **/
// Set data only number ID.

doSomething2(this.ids);

doSomething2 = (ids: number[]) => {
  // do something...
}

Есть массив ids в котором может быть или only string или only number.

В interface`e IData я указал, что id имеет тип либо string либо number.

Далее в одном месте приложения я инициализирую объект data только string`ами.
И вызываю функцию doSomething1(dataIds), указывая в качестве аргумента массив с id.

В другом месте инициализирую только number`ами, и вызываю функцию doSomething2(dataIds)

// (2) Typescript ругаеться на функцию <b>doSomething2</b>.

Argument of type '(string | number)[]' is not assignable to parameter of type 'number[]'.
  Type '(string | number)[]' is not assignable to type 'number[]'.
    Type 'string | number' is not assignable to type 'number'.
      Type 'string' is not assignable to type 'number'

Я же четко указал, что у него может быть тип только number или только string.
Так в чем же проблема и как ее решить?
  • Вопрос задан
  • 239 просмотров
Решения вопроса 1
Robur
@Robur
Знаю больше чем это необходимо
вместо
(string | number)[]

используйте

string[] | number[]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы