TypeScript是否可以推断参数对象或为参数对象定义类型?

时间:2020-10-30 19:34:00

标签: typescript

我的类型如下:

type success = (data: any, value: string, settings: any) => void

或如下所示的接口

// interface success { (data: any, value: string, settings: any): void }

我有一个这样的物体 { onSuccess: (<need to have 'success' type here for arguments>) => { callbackFunction(<call using the same arguments passed to OnSuccess function>) } }

  • 是否有一种方法可以将arguments对象传递给onSuccess函数,并将其类型推断为success类型?如果是这样,如何定义类似于上面的interface类型的typesuccess签名,可以用来推断类型?

2 个答案:

答案 0 :(得分:2)

尝试使用内置的Parameters

type success = (data: any, value: string, settings: any) => void

const fn = (...args: Parameters<success>) => {}

答案 1 :(得分:0)

如果对象参数的顺序始终相同,则可以使用Object.values和散布运算符

Object.valueshttps://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Object/values

> const fn = (a, b, c) => ({a,b,c})
undefined
> fn({a: 5, b: 3, c:2})
{ a: { a: 5, b: 3, c: 2 }, b: undefined, c: undefined }
> fn(...Object.values({a: 5, b: 3, c: 2}))
{ a: 5, b: 3, c: 2 }

其中Object.values({a: 5, b: 3, c: 2})等于[5, 3, 2]

尽管我不建议这样做,而只是添加一些代码以直接将其映射以防止以后出现错误。