如何在 TypeScript 中为 Object.entries 函数添加重载

时间:2021-02-13 15:02:10

标签: typescript

我有一个自定义类型 SpecialRecord<K,V> 并且想定义 Object.entries 在它上面的行为。这类似于在某处如何定义 Object.entriesRecord 类型上的行为。

我尝试在全局 .d.ts 文件中重载该方法,但它似乎没有采用此定义。另外,我想扩展定义,而不是完全覆盖它。

interface Object {
    entries<K, V>(obj: SpecialRecord<K,V>): [K,V][]
}

如果我改为将其称为 xentries,然后使用 xentries,它将通过输入。这表明文件正在加载(当然这会在运行时失败)。

如何正确地向 Object.entries 添加附加类型?

1 个答案:

答案 0 :(得分:1)

entries() 是在 ObjectConstrutor 中定义的,所以你可以这样做:

interface MyInt {
  foo: string;
}

interface ObjectConstructor {
  entries(obj: MyInt): ['foo', string];
}

const myobj: MyInt = {foo: 'a'};
const t = Object.entries(myobj);