typescript 延伸类型以添加静止参数

uqdfh47h  于 2023-01-06  发布在  TypeScript
关注(0)|答案(1)|浏览(109)

我喜欢的类型

export type baseEventType = {
    eName: string;
    mName: string;
    
};

我想把它扩展成一个rest参数

interface gEvent extends baseEventType {
    ...rest: any[]
}

这显然行不通
我想这样使用它

export const save = ({ eName, mName, ...rest }: gEvent) =>

那么,有没有一种方法可以做到这一点呢?显然,以下方法是可行的

export const save = (eName: string, mName: string, ...rest: any[]) => {

但我更希望我能做一些类似于其他结构的东西。

dsf9zpds

dsf9zpds1#

您可以向gEvent添加索引签名,但这实际上将禁用参数的类型检查,从而允许您传入baseEvetType中具有任何类型的偶数属性:

export type baseEventType = {
    eName: string;
    mName: string;
};
interface gEvent extends baseEventType {
    [name: string]: any;
}

export const save = ({ eName, mName, ...rest }: gEvent) => {

}

save({
  eName: 0 // eName is declared as string but we can pass number because of the index signature
})

Playground链接
在这里使用交集类型可能是一个更好的主意。这在类型检查命名属性时会做得更好:

type gEvent = baseEventType & {
    [name: string]: any;
}

export const save = ({ eName, mName, ...rest }: gEvent) => {

}

save({
  eName: 0, // error
  other: "", // ok
})

Playground链接

相关问题