繁体   English   中英

使用TypeScript时如何处理浏览器API中的可选参数

[英]How to deal with optional parameters in browser API when using TypeScript

例子:

Error构造函数( new Error([message[, fileName[, lineNumber]]]) )有两个我想使用的可选参数(fileName 和 lineNumber),但 TypeScript 编译器抱怨以下错误消息Expected 0-1 arguments, but got 3

在 TypeScript 中防止这种错误的正确方法是什么?

Error您上面链接的Error文档,我看到了:

  • message :可选。 人类可读的错误描述。

  • fileName This API has not been standardized. : 可选的。 创建的Error对象上的fileName属性的值。 默认为包含调用Error()构造函数的代码的文件的名称。

  • lineNumber This API has not been standardized. : 可选的。 创建的Error对象上的lineNumber属性的值。 默认为包含Error()构造函数调用的行号。

那些大黄色警告的标题是“此 API 尚未标准化”。 (您可以在悬停时看到)。 如果您查看文档底部的兼容性表,它目前表示只有 Firefox 支持这些参数。 其他浏览器和节点没有。

所以我猜 TypeScript 没有将它们包含在Error构造函数的标准库定义中的原因是因为它不能保证在所有 JavaScript 环境中都能工作。


现在,如果您确定运行发出的 JS 代码的环境确实支持这些参数(即,如果您只打算在 Firefox 中运行代码),则可以在自己的 TypeScript 代码中使用声明合并来添加适当的签名:

// assuming your code is in a module, so using global augmentation here
declare global {
  interface ErrorConstructor {
    new(message?: string, fileName?: string, lineNumber?: number): Error;
  }
}

然后编译器不会警告你:

export const iAmInAModule = true;
throw new Error("Badness happened", "badthing.js", 123); // no compiler warning now

如你所愿。


希望有所帮助; 祝你好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM