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

Typescript 如何扩展或重用函数类型声明?,typescript,typescript2.0,Typescript,Typescript2.0,我有一个函数,它根据输入返回一个不同的值,这个函数的类型是 type func = ( a: string, b:string, c:string, d:string, e:string, f:string, list?: boolean ) => string | string[] const myFunction: func = require('./foo') 但这并不完全正确,基本上,如果传递list=true,返回的是数组,而不是字符串 所以我重写了这些类型 type f

我有一个函数,它根据输入返回一个不同的值,这个函数的类型是

type func = (
  a: string, b:string, c:string, d:string, e:string, f:string, list?: boolean
) => string | string[]

const myFunction: func = require('./foo')
但这并不完全正确,基本上,如果传递list=true,返回的是数组,而不是字符串

所以我重写了这些类型

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

您只需使用以下命令即可:


凉的还没有使用ts 3.0,但很高兴有一种方法可以做到这一点
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[]>;