【发布时间】:2017-05-31 13:57:03
【问题描述】:
我的团队从事一个相对较大的 NodeJS 项目,用 ES6 编写,通过 babel 进行转译,然后使用无服务器部署为 AWS lambdas。这个项目的重点是消费、映射/转换和输出我们定义的一种特定对象类型。
我们的问题是,ECMA/JavaScript 不是强类型的,所以如果我们犯了一个错误,比如在某处将字段视为数组而在其他地方视为字符串,则除了运行时错误外,没有什么可以捕捉到的。我们也没有很好地记录这个对象的结构,所以有时消费者会向我们发送对象的实例,其中包含我们说我们处理但实际上并没有使用的稍微命名错误的字段中的数据。
我正在寻找一种方法来为我们项目中的这个特定对象创建某种模式或类型定义,以便我们可以使用它来更正我们的代码,使我们的处理更加健壮,并为它创建更好的文档。现在,我知道 VSCode 在 JavaScript 中提供了一些 basic type checking,但我认为尝试 JSDoc 一个非常大的对象然后将该文档放入使用该对象的每个文件中是不可行的。我发现 VSCode 也可以以某种方式驱动检查with .d.ts files,但我不明白是否或如何将其用于我们设计的特定自定义对象。我发现的大部分内容似乎都与为外部库拉取 .d.ts 文件特别相关。
那么,TL:DR,在 NodeJS/ES6 项目中,是否有可能使一个在整个项目中广泛使用的对象成为强类型的? VSCode 中的错误检查是可以接受的,但是我们可以在转译之前触发的某种命令行 linting 也很棒。
【问题讨论】:
-
在 JavaScript 中,没有。将所有内容都转换为 TypeScript,然后也许,尽管除了显式验证之外,您无法对将 munged 对象传递给 API 的外部代码做太多事情。
-
您的问题正是打字稿存在的原因。您可以在打字稿中编写“一个对象”并在其他 javascript 文件中使用该对象。让打字稿发出带有compiler option
--declaration的声明文件,我认为当您require编译的js 时,vscode 会检测到打字。checkJSto emit type errors for javascript files 还有一个编译器选项。 -
好吧,伙计们,想通了。 @rico-kahler 走在正确的轨道上,但大多数人只是拒绝接受。 stackoverflow.com/questions/44286781/…
-
@cgm123 嗯,是的,关于 ES6 的问题的严格答案是不。类型化的解决方案是不同的语言。
标签: javascript node.js ecmascript-6 visual-studio-code typechecking