提问者:小点点

如何扩展或重用函数类型声明?


所以我有一个函数,它根据输入返回不同的值,到目前为止,这个函数的类型是

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类型声明?


共1个答案

匿名用户

使用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[]>;