Electron 中宣布支持 TypeScript
electron
npm 包现在包含一个 TypeScript 定义文件,该文件提供了整个 Electron API 的详细注解。即使您正在编写纯 JavaScript,这些注解也可以改善您的 Electron 开发体验。只需 npm install electron
即可在您的项目中获取最新的 Electron 类型定义。
TypeScript 是 Microsoft 创建的开源编程语言。它是 JavaScript 的超集,通过添加对静态类型的支持来扩展该语言。TypeScript 社区近年来发展迅速,在最近的 Stack Overflow 开发者调查中,TypeScript 被评为 最受欢迎的编程语言之一。TypeScript 被描述为“可扩展的 JavaScript”,GitHub、Slack 和 Microsoft 的团队都在使用它来编写可扩展的 Electron 应用,这些应用被数百万人使用。
TypeScript 支持 JavaScript 中许多较新的语言功能,如类、对象解构和 async/await,但其真正的差异化功能是类型注解。声明程序期望的输入和输出数据类型可以 减少错误,帮助您在编译时发现错误,并且注解还可以作为 程序如何工作的正式声明。
当库用纯 Javascript 编写时,类型通常在编写文档时才被模糊地定义为事后诸葛亮。函数通常可以接受比文档中更多的类型,或者函数可能具有未记录的隐形约束,这可能导致运行时错误。
TypeScript 通过定义文件解决了这个问题。TypeScript 定义文件描述了库的所有功能及其预期的输入和输出类型。当库作者将 TypeScript 定义文件与他们发布的库捆绑在一起时,该库的使用者可以 直接在他们的编辑器中探索其 API 并立即开始使用它,通常无需查阅库的文档。
许多流行的项目,如 Angular、Vue.js、node-github (以及现在的 Electron!) 编译他们自己的定义文件并将其与他们发布的 npm 包捆绑在一起。对于那些不捆绑自己的定义文件的项目,有 DefinitelyTyped,这是一个由社区维护的第三方定义文件的生态系统。
安装
从 1.6.10 版本开始,每个 Electron 版本都包含自己的 TypeScript 定义文件。当您从 npm 安装 electron
包时,electron.d.ts
文件会自动与安装包捆绑在一起。
安装 Electron 的 最安全的方法是使用确切的版本号
npm install electron --save-dev --save-exact
或者,如果您正在使用 yarn
yarn add electron --dev --exact
如果您已经在使用第三方定义,如 @types/electron
和 @types/node
,您应该从您的 Electron 项目中删除它们,以防止任何冲突。
该定义文件源自我们的 结构化 API 文档,因此它将始终与 Electron 的 API 文档保持一致。只需安装 electron
,您将始终获得与您正在使用的 Electron 版本同步的 TypeScript 定义。
用法
有关如何安装和使用 Electron 的新 TypeScript 注解的摘要,请观看此简短的演示截屏视频
如果您正在使用 Visual Studio Code,您已经内置了 TypeScript 支持。 还有社区维护的 Atom、Sublime、vim 和 其他编辑器的插件。
一旦您的编辑器配置为 TypeScript,您将开始看到更多上下文感知的行为,如自动完成建议、内联方法引用、参数检查等等。
TypeScript 入门
如果您是 TypeScript 新手并想了解更多信息,Microsoft 的这个 入门视频 提供了关于该语言为何创建、如何工作、如何使用以及未来发展方向的良好概述。
官方 TypeScript 网站上还有一个 手册 和一个 playground。
由于 TypeScript 是 JavaScript 的超集,因此您现有的 JavaScript 代码已经是有效的 TypeScript。这意味着您可以逐步将现有的 JavaScript 项目过渡到 TypeScript,根据需要添加新的语言功能。
感谢
如果没有 Electron 社区的开源维护者的帮助,这个项目是不可能实现的。感谢 Samuel Attard、Felix Rieseberg、Birunthan Mohanathas、Milan Burda、Brendan Forster 以及许多其他人的错误修复、文档改进和技术指导。
支持
如果您在使用 Electron 的新 TypeScript 定义文件时遇到任何问题,请在 electron-typescript-definitions 存储库上提交问题。
TypeScript 愉快!