代码之家  ›  专栏  ›  技术社区  ›  doberkofler

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

  •  1
  • doberkofler  · 技术社区  · 6 年前

    例子:

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

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   jcalz    6 年前

    看着 Error documentation 你在上面链接,我看到:

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

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

    • lineNumber This API has not been standardized. 可选。的值 直线数 创建的上的属性 误差 对象。默认为包含 错误() 构造函数调用。

    这些大黄色警告的标题是“这个API还没有标准化”。(您可以在悬停时看到)。如果你看 compatibility table 在文档的底部,它目前说只有Firefox支持这些参数。其他浏览器和节点没有。

    所以我猜是因为typescript没有把它们包含在 standard library definition for the Error constructor 因为它不能保证在所有的JavaScript环境中都能工作。


    如果你现在 某些 运行发出的JS代码的环境确实支持这些参数(即,如果只在Firefox中运行代码),则可以使用 declaration merging 在您自己的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
    

    如你所愿。


    希望有帮助;祝你好运!