type TestType = {
value:string
run:(v:string)=>void
}
|
{
value:string[],
run:(v:string[])=>void
}
var obj:TestType = {
value:'12',
run:(val)=>{ // val为什么是any?而不是string?
}
}
想实现value是string那么val就是string,value是string[]那么val就是string[]
要实现这个需求,你可以使用 TypeScript 的联合类型和类型守卫。首先,将
TestType
类型定义为两个独立的类型,然后使用类型守卫在run
函数内部确定value
的类型。上面的代码中,将
TestType
定义为两个独立的类型TestTypeString
和TestTypeStringArray
,然后将它们组合成一个联合类型TestType
。接下来,我们创建了一个类型守卫函数isTestTypeString
,以确定obj
是否为TestTypeString
类型。最后,在run
函数内部,我们使用类型守卫函数来判断value
的类型,从而使 TypeScript 能够正确推断val
的类型。