Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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_Types_Parameter Passing - Fatal编程技术网

TypeScript:将类型化对象传递给接受受限但通用参数的函数

TypeScript:将类型化对象传递给接受受限但通用参数的函数,typescript,types,parameter-passing,Typescript,Types,Parameter Passing,我想编写一个只适用于普通旧数据对象的函数(因为我想使用postMessage),然后我想将对象交给该函数: //普通旧数据只能是布尔、数字、字符串 //或者由普通旧数据组成的数组或对象 类型PodArray=Pod[] 类型PodObject={[index:string]:Pod} 类型Pod=boolean | number | string | PodArray | PodObject //所有这些工作: 让test1:Pod=1 让测试2:Pod=“两个” 让test3:Pod=[3,3

我想编写一个只适用于普通旧数据对象的函数(因为我想使用postMessage),然后我想将对象交给该函数:

//普通旧数据只能是布尔、数字、字符串
//或者由普通旧数据组成的数组或对象
类型PodArray=Pod[]
类型PodObject={[index:string]:Pod}
类型Pod=boolean | number | string | PodArray | PodObject
//所有这些工作:
让test1:Pod=1
让测试2:Pod=“两个”
让test3:Pod=[3,3,3]
让test4:Pod={4:4}
让test5:Pod={1:1,2:“两个”,3:[3,3,3],4:{4:4}
//这并不是:
功能发送(数据:Pod){
postMessage(数据“”)
}
接口MyType{
关键词1:数字
键2:字符串
}
let data:MyType={key1:1,key2:“2”}
发送(数据)//失败,因为类型“MyType”中缺少索引签名

这是有意义的,因为MyType不扩展Pod,也不应该扩展Pod,因为我不想在其中包含除键1和键2之外的任何内容

如何编写一个函数,它接受某个类别的常规参数并拒绝其他类型的参数,然后提交类型更窄的参数


编辑:我现在有一种方法,我通过或多或少的尝试和错误发现:

type PodObject={[K in keyof T]:Pod}
类型Pod=T扩展布尔值|数字|字符串?T:
T扩展函数?从未:
T扩展对象?PodObject:
从未
功能发送(数据:Pod){
postMessage(数据“”)
}
接口MyType{
关键词1:数字
键2:字符串
关键词3:肌瘤型
}
界面肌瘤型{
键4:数字
键5:数字[]
}
让数据:MyType={key1:1,key2:“2”,key3:{key4:3,key5:[1,2]}
发送([{data,5:5}])
发送({})
发送(函数(){})//错误
发送(1)
发送([1,2,3])
发送({a:4,b:[1,“x”,3],数据,f:()=>{})//错误
我的设计思想是,参数的类型将作为T传递到条件链中。然而,由于我没有使用定义的T“调用”Pod对象,但它尝试将Pod的条件链的结果与参数类型匹配(因此它实际上应该向后工作),我真的不明白为什么它会起作用,我也不确定它是否真的做了它应该做的事情。任何帮助都很感激