Javascript 为接收可选propertyName作为参数并返回该属性';s对象或完整对象的值
函数,该函数获取可选参数Javascript 为接收可选propertyName作为参数并返回该属性';s对象或完整对象的值,javascript,typescript,object,properties,typescript-typings,Javascript,Typescript,Object,Properties,Typescript Typings,函数,该函数获取可选参数propName,该参数应该是SOME\u OBJECT的键,如果propName被传递,则返回propName值;如果propName未定义,则返回完整的对象: 代码如下: type SOME_OBJECT = { propA: string, propB: number, } const getPropertyOrFullObject = <K extends keyof SOME_OBJECT>(propName?: K) : SOME_OBJ
propName
,该参数应该是SOME\u OBJECT
的键,如果propName
被传递,则返回propName
值;如果propName
未定义,则返回完整的对象
:
代码如下:
type SOME_OBJECT = {
propA: string,
propB: number,
}
const getPropertyOrFullObject = <K extends keyof SOME_OBJECT>(propName?: K)
: SOME_OBJECT[K] | SOME_OBJECT => {
const myData: SOME_OBJECT = { // IN REAL CASE, SOME_OBJECT WILL COME FROM ANOTHER PLACE
propA: "fooA",
propB: 42
};
if (propName) {
return myData[propName];
}
else {
return myData;
}
};
const propA = getPropertyOrFullObject("propA"); // EXPECT IT TO BE string
const propB = getPropertyOrFullObject("propB"); // EXPECT IT TO BE number
const fullObj = getPropertyOrFullObject(); // EXPECT IT TO BE SOME_OBJECT
键入某些对象={
普罗帕:弦,
建议B:数字,
}
常量getPropertyOrFullObject=(propName?:K)
:SOME_OBJECT[K]| SOME_OBJECT=>{
const myData:SOME_OBJECT={//在实际情况中,一些_OBJECT将来自另一个地方
普罗帕:“福阿”,
B:42
};
如果(名称){
返回myData[propName];
}
否则{
返回myData;
}
};
常量propA=getPropertyOrFullObject(“propA”);//希望是字符串
const propB=getPropertyOrFullObject(“propB”);//希望它是数字
const fullObj=getPropertyOrFullObject();//希望它是某个对象
代码可在
我没有得到我所期望的。我改成了工会会员。看:
这是因为TS无法准确计算出您的函数将返回什么。TS合并所有可能的返回
为了使它更简单,最好是重载函数
请看一个例子:
键入某些对象={
普罗帕:弦,
建议B:数字,
}
//这是新球员
接口重载{
(propName:K):某个对象[K]
():一些物体;
}
常量getPropertyOrFullObject:重载=(propName?:K)
:SOME_OBJECT[K]| SOME_OBJECT=>{
const myData:SOME_OBJECT={//在实际情况中,一些_OBJECT将来自另一个地方
普罗帕:“福阿”,
B:42
};
如果(名称){
常量r=myData[propName]
返回myData[propName];
}
否则{
返回myData;
}
};
常量propA=getPropertyOrFullObject(“propA”);//一串
const propB=getPropertyOrFullObject(“propB”);//数
const fullObj=getPropertyOrFullObject();//一些东西
根据@captain yossarian的回答,我最终做了以下几点:
type SOME_OBJECT = {
propA: string,
propB: number,
}
function getPropertyOrFullObject(): SOME_OBJECT;
function getPropertyOrFullObject<K extends keyof SOME_OBJECT>(propName: K): SOME_OBJECT[K];
function getPropertyOrFullObject<K extends keyof SOME_OBJECT>(propName?: K): SOME_OBJECT | SOME_OBJECT[K] {
const SOME_OBJECT: SOME_OBJECT = { // IN REAL CASE, THIS WILL COME FROM ELSEWHERE
propA: "fooA",
propB: 42
};
return propName ?
SOME_OBJECT[propName]
: SOME_OBJECT;
}
const propA = getPropertyOrFullObject("propA"); // THIS IS string
const propB = getPropertyOrFullObject("propB"); // THIS IS number
const fullObj = getPropertyOrFullObject(); // THIS IS SOME_OBJECT
键入某些对象={
普罗帕:弦,
建议B:数字,
}
函数getPropertyOrFullObject():一些对象;
函数getPropertyOrFullObject(propName:K):一些_对象[K];
函数getPropertyOrFullObject(propName?:K):SOME_OBJECT | SOME_OBJECT[K]{
const SOME_OBJECT:SOME_OBJECT={//在实际情况中,这将来自其他地方
普罗帕:“福阿”,
B:42
};
返回propName?
某个对象[名称]
:一些物体;
}
常量propA=getPropertyOrFullObject(“propA”);//这是字符串
const propB=getPropertyOrFullObject(“propB”);//这是电话号码
const fullObj=getPropertyOrFullObject();//这是什么东西
我认为它使重载更具可读性,更容易理解
谢谢。你知道我能不能用一个定制的防护装置做同样的事情吗?示例:将propertyName
选中isPropertyOfSomeObject
函数,该函数将返回propertyName是某个对象的键。请在新的typescriptp平台中分享您的示例,并更新您的问题。我会尽力帮忙的