为何Angular将TypeScript接口编译为函数?

我需要在NodeJS后端和Angular前端之间共享一些通用接口。因此,我创建了一个仅包含库的新Angular项目。

这是一个界面示例:

export interface EvPageRef {
    page_id: string;
    src_page: string;
}

如果我使用TypeScript 3.x编译上述内容,则不会输出任何内容。没有我期望的JavaScript输出,但是如果将以上内容添加到Angular库中,则会得到以下内容。

    /**
     * @record
     */
    function EvPageRef() { }
    if (false) {
        /** @type {?} */
        EvPageRef.prototype.page_id;
        /** @type {?} */
        EvPageRef.prototype.src_page;
    }

这是为umd项目输出中的esm5ems2015dist/example源代码文件夹生成的。

上面是TypeScript类型定义文件,其中包含interface文件夹中的dist/example/lib声明。

所以我对此有两个问题:

  1. 为什么要在这里?有什么意义?
  2. 这不会增加使用此库的Angular项目的大小吗?
w509637JOB 回答:为何Angular将TypeScript接口编译为函数?

带有接口作为功能的JavaScript的输出由tsickle创建,它是Angular模板的编译中间件,生成了对Google Closure友好的代码。

https://angular.io/guide/angular-compiler-options#annotateforclosurecompiler

文档尚不清楚为什么这是Angular构建过程的一部分。它还指出此选项默认为false

我更新了tsconfig.lib.json以禁用此选项,现在我的JavaScript文件为空。

tsconfig.lib.json

  "angularCompilerOptions": {
    "annotateForClosureCompiler": false,},

该项目不包含任何组件,因此我很乐意关闭此功能,但我对Angular Library生成器为何启用此功能感到困惑。该文档没有说明存在什么问题或好处。

我仍然会接受一个答案,该答案可以回答为什么将其打开。

本文链接:https://www.f2er.com/2829643.html

大家都在问