我正在尝试确定Object.keys()
的参数类型,这是官方声明(lib.es6.d.ts):
interface ObjectConstructor {
new(value?: any): Object;
(): any;
(value: any): any;
...
/**
* Returns the names of the enumerable properties and methods of an object.
* @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.
*/
keys(o: any): string[];
}
所以我有这样的功能:
v.registerMap = function (o: NotSureWhatTypeToUse): Promise<Array<any>> {
let keys: Array<string>;
try {
keys = Object.keys(o); // perhaps this will never throw
}
catch (err) {
_suman.log.error('Could not call Object.keys(o), where o is:', util.inspect(o));
throw err;
}
return Promise.all(keys.map(function (k) {
try {
return valuesMap[k] = o.get(k)
}
catch (err) {
return valuesMap[k] = o[k];
}
}));
};
如上所示,我试图处理原始参数是Map或普通对象的情况。
异步库使用Dictionary<{}>
作为类型类型参数的TypeScript类型。那是我要找的那个吗?
在异步库中,此类型如下所示:
export interface Dictionary<T> { [key: string]: T; }
也许是我要找的那个。
答案 0 :(得分:0)
我认为最好的办法就是将输入限制为普通对象,如下所示:
type PlainObj = {}
v.registerMap = function (o: PlainObj): Promise<Array<any>> {...};
然而,我感到困惑的一件事是泛型如何在异步库中工作。 async lib使用Dictionary,如下所示:
export interface Dictionary<T> { [key: string]: T; }
我不知道Dictionary<any>
与PlainObj
的区别。