Angular 库应该用 typescript 编写还是编译成 javascript

Posted

技术标签:

【中文标题】Angular 库应该用 typescript 编写还是编译成 javascript【英文标题】:Shall Angular libraries be written in typescript or compiled to javascript 【发布时间】:2018-06-13 23:54:32 【问题描述】:

我正在开发一个库,它将通过 npm 作为 Angular 模块安装。该库是用打字稿编写的。在 Angular 5.0.0 之前,一切都像一个魅力,但是自从 5.0 用户开始收到以下错误:

./node_modules/mypackage/index.ts 中的错误模块构建失败: 错误:/node_modules/mypackage/index.ts 不属于 编译输出。请检查其他错误消息 详情。

作为一种解决方法,我可以在 tsconfig.json 中添加文件的包含路径。我的问题是我是否应该继续在打字稿中提供一个库,还是应该将其编译为 JS 并作为编译包发布,为什么?

【问题讨论】:

【参考方案1】:

将 typescript 代码发布到 npm 的最佳实践写在:https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html

TL:DR - 将 js 与正确的类型定义一起发布。

它将允许任何 js 消费者可以使用 lib,并且 ts 用户可以从类型中受益。在极少数情况下,您希望按原样交付 ts 代码,例如允许从用户级代码到节点模块的细粒度编译。

【讨论】:

我同意,我在 github.com 上有几个项目,您可以在其中看到我如何设置 typescript 以允许通过 npm 分发(例如github.com/wzr1337/rsiServer)。我将源映射与模块一起提供,因为我认为它使每个人的调试都变得更加容易。

以上是关于Angular 库应该用 typescript 编写还是编译成 javascript的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2015 没有将 TypeScript 编译为 ASP.NET Core 项目的一部分?

我应该推送已编译的 javascript 还是忽略它们?

如何在 npm 上发布 angular 2 typescript 库

如何在 Angular 2 typescript 应用程序中使用 moment.js 库?

typescript Angular 2测试片段。代码库https://developers.livechatinc.com/blog/category/programming/angular-2/

Angular搭建与分析