简体   繁体   中英

How to make TypeScript know which type will be returned if generic's parameter could be string OR number

Consider function with below signature:

function removeNumbersOrStringsElementsFromArray(
    targetArray: Array<number | string>,
    targetElementOrMultipleOfThem: number | string | Array<number | string>
): {
  updatedArray: Array<number | string>;
  removedElementsIndexes: Array<number>;
} {
  // implementation
}

Even if all elements of targetArray are strings or all elements are numbers,

const result: Array<string> = removeNumbersOrStringsElementsFromArray([ 1, 2, 3, 4 ], [ 1, 2 ]).updatedArray;

will cause error:

“Type (string|number) is not assignable to type string[]”

If I'll change the signature from Array<number | string>Array<number | string> to Array<number> | Array<string> Array<number> | Array<string> , It's becomes required to change the removeNumbersOrStringsElementsFromArray implementation too, however from the view point of JavaScript, it works. Some other solutions?

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;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM