参数列表中间的Typescript rest参数

Szy*_*ski 3 arguments typescript

我想声明一个函数,其中最后一个参数始终是一个回调.但是当我这样做时:

interface Statement extends events.EventEmitter {
    bind(...args, callback?:(err?:Error)=>void) : Statement;
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误

error TS1014: Rest parameter must be last in list
Run Code Online (Sandbox Code Playgroud)

typescript中是否可以将Rest参数作为参数列表中的最后一个参数?有什么黑客可以帮我解决这个问题吗?

bel*_*a53 9

虽然rest 参数需要是最后一个,但您现在可以在 TS 4.0 中使用可变元组类型

type VarCallback<T extends any[]> = (...args: [...T, (err?: Error) => void]) => void
Run Code Online (Sandbox Code Playgroud)

VarCallback确保,最后一个函数参数是回调类型(err?: Error) => void

例如,用前两个参数和声明一个函数类型stringnumber

type MyCallback = VarCallback<[string, number]>
// (a1: string, a2: number, a3: (err?: Error | undefined) => void) => void

const myCb: MyCallback = (s, n, cb) => {/* your implementation */ }
// s,n,cb are strongly typed now
Run Code Online (Sandbox Code Playgroud)

实时代码示例


Rya*_*ugh 6

TypeScript不支持此功能.您可以做的最好的事情是...args: any[],或者只使用具有更合理的参数排序的库.