【发布时间】:2022-01-26 17:01:29
【问题描述】:
有一个功能:
function getFirstObjectArray<T>(obj: T): any | null {
const keys = Object.keys(obj);
if(keys.length) {
const [key, ...restk] = keys;
const [firstObject, ...restv] = obj[key] || [];
return firstObject;
}
return null;
}
我有收入对象:
let obj = {100: [1, 2, 3], 200: [4, 5, 6]}
结果我尝试获取1。第一个元素的值是第一个对象。
我收到此错误:
Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'unknown'.
No index signature with a parameter of type 'string' was found on type 'unknown'.
所以,我尝试获取第一个对象,然后从数组中获取第一个元素。
【问题讨论】:
-
为什么是
const [firstObject, ...restv] = obj[key] || [];而不是const firstObject = obj[key]? -
1.如果您希望
T是一个对象类型,您需要声明这个<T extends {}>。 2. 这行const [firstObject, ...restv] = obj[key] || [];没有任何意义:您希望每个对象访问都是一个数组?如果是这种情况,您也需要为此限制泛型。 -
因为我有这个初始对象:
let obj = {100: [1, 2, 3]} -
再一次,如果你希望 T 是一个特定形状的对象,那么你需要告诉类型检查器,比如@ 987654331@ 然后
<T extends MyType>。或者根本不使用泛型,不清楚为什么?为什么需要一个通用函数来处理一个特定的对象? -
是的,让我们不要使用泛型,反正我得到一个错误。如何正确制作?
标签: typescript