#arrays #typescript
#массивы #typescript
Вопрос:
Рассмотрим функцию с подписью ниже:
function removeNumbersOrStringsElementsFromArray(
targetArray: Array<number | string>,
targetElementOrMultipleOfThem: number | string | Array<number | string>
): {
updatedArray: Array<number | string>;
removedElementsIndexes: Array<number>;
} {
// implementation
}
Даже если все элементы targetArray
являются строками или все элементы являются числами,
const result: Array<string> = removeNumbersOrStringsElementsFromArray([ 1, 2, 3, 4 ], [ 1, 2 ]).updatedArray;
вызовет ошибку:
“Type (string|number) is not assignable to type string[]”
Если я изменю подпись с Array<number | string>
на Array<number> | Array<string>
, также потребуется изменить removeNumbersOrStringsElementsFromArray
реализацию, однако с точки зрения JavaScript это работает. Какие-либо другие решения?
Ответ №1:
function removeNumbersOrStringsElementsFromArray< T extends string | number>(
targetArray: Array<T>,
targetElementOrMultipleOfThem: T | Array<T>
): {
updatedArray: Array<T>;
removedElementsIndexes: Array<number>;
} {
}
const result: Array<number> = removeNumbersOrStringsElementsFromArray([1, 2, 3, 4], [1, 2]).updatedArray;