Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
Javascript 为接收可选propertyName作为参数并返回该属性';s对象或完整对象的值_Javascript_Typescript_Object_Properties_Typescript Typings - Fatal编程技术网

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平台中分享您的示例,并更新您的问题。我会尽力帮忙的