![](/img/trans.png)
[英]When calling a JavaScript function from TypeScript, how do I override the inferred type?
[英]How do I override type of a standard library function in TypeScript?
我正在开发一个 polyfill,它通过向 reviver 回调 function 添加可选的第三个参数来扩展JSON.parse()
function 的行为。
polyfill 应该像这样为最终用户导入:
import 'my-polyfill';
JSON.parse()
在node_modules/typescript/lib/lib.es5.d.ts
中定义如下:
// lib.es5.d.ts
interface JSON {
// …
parse(
text: string,
reviver?: (this: any, key: string, value: any) => any
): any;
// …
}
如何覆盖此定义,以便在安装/导入 polyfill 时使用我的定义? 例如:
interface ContextType {
// …
}
interface JSON {
parse<Type = any>(
text: string,
reviver?: (
key: string,
value: any,
context?: ContextType
) => any
): Type;
}
您可以创建声明文件并将其命名为polyfill.d.ts
等。 然后,您应该使用标准方式扩展全局类型,如下所示:
declare global {
interface JSON {
// Here, you should write your own implementation of `parse` function.
parse(variable: string): void;
}
}
export {};
export
是 TypeScript 所必需的,您可以在此答案及其评论中了解更多信息。
不要忘记,当您创建一个单独的库时,该文件应该存在于最终构建目录中。 因此,当某些用户安装您的 package 并导入它时,文件polyfill.d.ts
将由 TypeScript 自动应用。
我不确定您是否能够制作具有自己功能的 TypeScript 传输声明文件 ( .d.ts
)。 为此,我们应该使用此处描述的一些 hack。 我们应该将文件命名为polyfill.ts
而不是polyfill.d.ts
并将其导入到库的index.ts
文件中,这样它将被 TypeScript 导入并传输到构建目录。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.