我无法理解这个奇怪的JS Flow语法

时间:2018-05-28 23:00:19

标签: javascript flowtype

我正在尝试从应用程序中删除一些JS Flow类型语法,但我似乎无法准确地重构这一行。这是课堂宣言的一部分:

declare class Error {
  static (message?:string): Error;
  static call(x: any): void;
  static captureStackTrace(x: any, x: any): void;
  name: string;
  message: string;
  stack: string;
}

有问题的行是static (message?:string): Error;

这条线在做什么,如何在没有Flow的情况下重写它?

它看起来像一个方法,但没有名字....任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:1)

它是工厂功能的声明,只是与类声明合并 因此,您可以输入以下内容:const error = Error(message)

为了减少混淆,可以将其重写为constructor (message?: string): Error 然后,您需要使用newconst error = new Error(message) 以下是两种方式的示例 - try flow

因此,如果没有流程,您只需编写一个返回Error对象的函数,如果不是string,可能会检查其第一个参数是undefined

答案 1 :(得分:0)

我不是flow的专业人士,但我会尝试回答你的问题。

  

这行做什么

该方法接受名为string的可选message变量,并返回Error个对象。

  

如何在没有Flow的情况下重写它?

我认为您可以使用typeof来检查变量的类型。您可以找到更多信息here

答案 2 :(得分:0)

据我了解,此定义是检查基本错误对象的输入类型。

这种Flow语义称为库定义,用于定义第三方库的类型检查。您可以在下面看到定义。

Flow defintion

因此,您需要做的是创建一个自定义的Error函数,例如myError,然后将第一个参数类型检查为字符串。然后返回错误对象。