将索引签名添加到 .d.ts 中的函数

Posted

技术标签:

【中文标题】将索引签名添加到 .d.ts 中的函数【英文标题】:Add index signature to a function in .d.ts 【发布时间】:2021-11-28 06:00:08 【问题描述】:

我想覆盖 npm 库类型以向函数添加索引签名。假设该函数没有什么特别之处:

export function foo(input) 
  return Number(input);

它在.d.ts 文件中输入:

export default function foo(input: string): number | null;

我想给这个函数添加属性,比如:

foo['something'] = 2;

如何更改 .d.ts 文件,以便我可以使用 any 属性来执行此操作,而不仅仅是 something? 它应该具有[index: string]: number; 的索引签名。我已经找到了如何做到这一点的答案,但仅限于单个或几个已知属性,但我需要将任何字符串作为键。

【问题讨论】:

【参考方案1】:

我自己通过在 TSPlayground 上使用 Object.assign 将函数与对象(使用索引签名键入)合并找到了答案,它可以为我生成 .d.ts

declare const foo: ((input: string) => number | null) & 
  [key: string]: number;
;

export default parse;

【讨论】:

以上是关于将索引签名添加到 .d.ts 中的函数的主要内容,如果未能解决你的问题,请参考以下文章

将带有字符串索引的运行数字添加到 Spark 中的数据框?

打字稿:类型“”没有索引签名

node_modules/rxjs-compat/operator/shareReplay.d.ts(2,10) 中的错误:错误 TS2305:

签名中的团队 ID 无效

type 'typeof globalThis' 没有索引签名

node_modules/@angular/material/table/cell.d.ts 中的错误 -Typescript 版本问题 angular