所以我有一个函数,它根据输入返回不同的值,到目前为止,这个函数的类型是
type func = (
a: string, b:string, c:string, d:string, e:string, f:string, list?: boolean
) => string | string[]
const myFunction: func = require('./foo')
然而,这并不完全正确,基本上,如果< code>list = true被传递,则返回的是< code >数组,否则返回的是< code >字符串
所以我重写了类型
type func1 = (
a: string, b:string, c:string, d:string, e:string, f:string
) => string
type func2 = (
a: string, b:string, c:string, d:string, e:string, f:string, list: true
) => string[]
const myFunction: func1 & func2 = require('./foo')
const aa = myFunction('a','b','c','d','e','f') // string
const bb = myFunction('a','b','c','d','e','f', true) // string array
这工作得很好,但是有大量的冗余。我知道我不能扩展类型,但是有类似的技巧吗
可以在打字稿中扩展类型吗?
这将允许我在声明func2
时使用一个func1
类型声明?
使用TypeScript 3.0中对元组类型作为rest参数类型的新支持,您几乎无法做到这一点:
type F<Rest extends any[], R> =
(a: string, b: string, c: string, d: string, e: string, f: string, ...rest: Rest) => R;
type func1 = F<[], string>;
type func2 = F<[true], string[]>;