Есть такой кусок кода:
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
.
Так в чем же проблема и как ее решить?