Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 如何根据第一个参数使第二个函数参数可选_Typescript - Fatal编程技术网

Typescript 如何根据第一个参数使第二个函数参数可选

Typescript 如何根据第一个参数使第二个函数参数可选,typescript,Typescript,我想为Vue emit函数创建类型。因此,应该可以在一个地方描述所有事件。但有些事件不包括有效负载 我想要这样或类似的API: const emit=getEmit() 发出(“输入”、“某些文本”) 发射(“切换”) 我尝试使用映射类型来实现这一点,然后从中创建联合 类型Emit={ [K in keyof T]:T[K]永远不会扩展? (事件:K)=>无效: (事件:K,有效载荷:T[K])=>void } export const getEmit=():Emit[keyof T]=>{

我想为Vue emit函数创建类型。因此,应该可以在一个地方描述所有事件。但有些事件不包括有效负载

我想要这样或类似的API:

const emit=getEmit()
发出(“输入”、“某些文本”)
发射(“切换”)
我尝试使用映射类型来实现这一点,然后从中创建联合

类型Emit={
[K in keyof T]:T[K]永远不会扩展?
(事件:K)=>无效:
(事件:K,有效载荷:T[K])=>void
}
export const getEmit=():Emit[keyof T]=>{
const instance=getCurrentInstance()
返回实例?.emit()=>{}
}
emit类型看起来像普通类型,但不起作用

const Status=“initial”|“final”
常量emit=getEmit()
//事件类型:
//((事件:“切换”)=>void);((事件:“更改”,有效负载:“初始”)=>void);((事件:“更改”,有效负载:“最终”)=>void)
emit(“toggle”)//应为2个参数,但得到1个
emit(“change”,“initial”)//不能将“string”类型的参数分配给“never”类型的参数

有没有办法满足我的需求?谢谢。

正如Usi提到的,您可以为此使用元组参数类型。 在我的例子中,它看起来是这样的:

export const getEmit=():(事件:K,…参数:T[K]从不扩展?[]:[payload:T[K]])=>void=>{
const instance=getCurrentInstance()
返回实例?.emit()=>{}
}

试试这个:我相信这篇文章会对你有所帮助