我正在编写一个小实用函数,用于从字符串或数组中删除指定数量的元素.我希望编译器能够根据传递给函数的内容来推断返回值是字符串还是array.有办法做到这一点吗?
function shave<T>(iterable: string | T[], n: number) {
return n > 0 ? iterable.slice(0, iterable.length - n) : iterable.slice(n * -1)
}
我正在编写一个小实用函数,用于从字符串或数组中删除指定数量的元素.我希望编译器能够根据传递给函数的内容来推断返回值是字符串还是array.有办法做到这一点吗?
function shave<T>(iterable: string | T[], n: number) {
return n > 0 ? iterable.slice(0, iterable.length - n) : iterable.slice(n * -1)
}
TypeScrip支持函数重载,允许为同一函数指定多个类型签名.
通过将这些签名放在函数本身之前来创建重载:
function shave<T>(s: T[], n:number): T[]
function shave(s: string, n:number): string
function shave<T>(iterable: string | T[], n: number) {
return n > 0 ? iterable.slice(0, iterable.length - n) : iterable.slice(n * -1)
}
使用这些重载,编译器会推断出您所期望的类型:
const s = shave("abc", 2) // string
const a = shave([1,2,3], 2) // number[]