Typescript 缩小回调参数的类型
我有一个功能:Typescript 缩小回调参数的类型,typescript,Typescript,我有一个功能: type Callback=(数据:记录)=>void const execCb=(cb:Callback)=>{ cb(某些数据) } 如您所见,数据非常通用,因为它可以是任何对象。但是,在定义回调时,我希望将数据缩小到特定类型: 类型MyCallBackData={ 傅:字符串, 酒吧:号码 } 常量myCallback=(数据:MyCallBackData)=>{ //做点什么 } execb(myCallback) Typescript抱怨,类型“Record”缺少类
type Callback=(数据:记录)=>void
const execCb=(cb:Callback)=>{
cb(某些数据)
}
如您所见,数据非常通用,因为它可以是任何对象。但是,在定义回调时,我希望将数据缩小到特定类型:
类型MyCallBackData={
傅:字符串,
酒吧:号码
}
常量myCallback=(数据:MyCallBackData)=>{
//做点什么
}
execb(myCallback)
Typescript抱怨,类型“Record”缺少类型“MyCallBackData”中的以下属性:foo,bar
在这种情况下,如何正确缩小类型
praground:参数
Record
,意味着可以传入一个没有属性的对象(就像传入{}
),但是传入的回调需要在第一个参数上有proeprities。所以这不是类型安全的
您可以做的是使execCb
generic,以便参数可以是任何类型。这也意味着您将无法在execCb
中传入具体对象(至少在没有类型断言的情况下是这样)。例如,您可以将其作为额外参数传递给execCb
type Callback<T> = (data: T) => void
const execCb = <T extends Record<string, unknown>>(cb: Callback<T>, param: T) => {
cb(param)
}
type MyCallBackData = {
foo: string,
bar: number
}
const myCallback = (data: MyCallBackData) => {
// do something
}
execCb(myCallback, {
foo: "",
bar: 1
})
type Callback=(数据:T)=>void
const execCb=(cb:Callback,param:T)=>{
cb(参数)
}
类型MyCallBackData={
傅:字符串,
酒吧:号码
}
常量myCallback=(数据:MyCallBackData)=>{
//做点什么
}
execb(myCallback{
傅:“,
酒吧:1
})
关于传递给回调的对象bering,我知道它始终是一条记录。我还可以通过编程确保为每个回调定义了所需的属性。然而,我不知道如何告诉typescript“我知道这个参数是正确的,并且拥有这个回调所需要的一切”。