如何根据传入参数获取函数返回值?如何获取复制数组元素的类型?
咱们一个个来解决你的问题哈:
问题1:根据传入参数获取函数的响应结果
你的clone函数目前有个小疏漏——它没有使用传入的参数,反而直接引用了全局的inputArray!这就导致不管你传什么数组进去,返回的都是同一个全局数组的副本。要让函数根据传入参数返回对应结果,只需要把函数里的inputArray替换成接收的参数就行:
let inputArray = [ { test: 1, }, { test: 2, }, ]; // 修正后的clone函数:使用传入的array参数 function clone(array: any[]): any[] { return Array.from(array); // 这里改成传入的array参数 } // 调用时传入参数,就能拿到对应参数的响应结果了 let outputArray = clone(inputArray);
这样调用clone(inputArray)时,函数就会基于你传入的参数生成副本并返回,你通过outputArray就能获取到这个响应结果啦。
问题2:获取复制后数组元素的类型
分两种场景来处理,分别对应运行时获取类型值和TypeScript类型层面获取元素类型:
运行时获取元素类型
如果你想在代码运行阶段知道元素的类型,直接用typeof操作符就可以:
// 获取整个元素的类型(这里会输出"object") console.log(typeof outputArray[0]); // 获取元素内部具体属性的类型(这里会输出"number") console.log(typeof outputArray[0].test);
如果是自定义类的实例,还可以用instanceof做更精确的判断,但你的例子里是普通对象,typeof就足够用了。
TypeScript类型层面获取元素类型
如果你想在TypeScript的类型系统里拿到元素的类型(比如用来定义变量类型),可以结合typeof和索引访问来实现:
// 先获取inputArray的类型 type InputArrayType = typeof inputArray; // 通过number索引拿到数组元素的类型 type ArrayElementType = InputArrayType[number]; // 现在ArrayElementType就是 { test: number; } 这个类型了 let newElement: ArrayElementType = { test: 3 }; // 完全符合类型检查
另外,你还可以给clone函数加上泛型,让它的返回类型自动推导,这样outputArray的元素类型会更精确,不用写死any[]:
// 泛型版本的clone函数,返回类型自动匹配传入数组的元素类型 function clone<T>(array: T[]): T[] { return Array.from(array); } let outputArray = clone(inputArray); // 此时outputArray的类型是 { test: number; }[],元素类型被自动推导出来
内容的提问来源于stack exchange,提问作者rus_anonym
相关产品推荐
相关产品推荐

