【问题标题】:Spread operator to merge object on import - AOT扩展运算符以在导入时合并对象 - AOT
【发布时间】:2019-01-29 18:37:50
【问题描述】:

我正在尝试提供一个对象,其中包含我的翻译键及其值示例:

{ 
  "try_again_key": "Try Again", 
  "cancel_key": "Cancel",
  "other_key": "Other"
  ...
} 

我必须在我的功能模块中导入这个对象并将其提供给一个库,以便我可以使用来自 Angular 的翻译,但在我的情况下,我需要像这样合并 2 个对象(都包含不同的翻译键):

import { myFallback } from "../../locale/fallback-ts";
import { otherFallback} from "@company/platform-components";

 @NgModule({
  imports: [
        TranslationsModule.forChild([
        {
            domain: "domain",
            service: "service",
            fallback: { ...otherFallback, ...myFallback },
        },
    ]),

当我在 JIT 上记录后备时 = 包含我的 2 个合并对象

当我在 AOT = 空对象上记录回退时

import { myFallback } from "../../locale/fallback-ts";
import { otherFallback} from "@company/platform-components";
 @NgModule({
  imports: [
        TranslationsModule.forChild([
        {
            domain: "domain",
            service: "service",
            fallback: myFallback,
        },
    ]),

当我在 JIT/AOT 上记录回退时 = 包含我的对象

但是如果我这样做,它可以工作,但它对我没有帮助,因为我不会合并对象,Angular AOT 似乎不支持传播运算符

我找到了一些关于 AOT 的链接:https://angular.io/guide/aot-compiler 在此链接中,它没有指定我不能与扩展运算符一起使用

这个 github 问题看起来像我需要的,但是 Angular 团队 https://github.com/angular/angular-cli/issues/9511 忽略了它

我的问题是,我做错了吗?如果这是角度 AOT 的限制,我可以用另一种方式合并 2 个对象吗?

我尝试过的事情:

使用Object.assign() 代替扩展运算符。

声明一个接收这 2 个对象的 const,然后在我的 .forChild() 方法中导入它

export const fallback = { ...tsValues, ...jsonValues};

【问题讨论】:

  • aot 编译器的实际错误是什么?它可能不是扩展运算符,但可能是 otherFallback 中的某些东西。进行测试,当您执行fallback: otherFallback 时它是否正确编译?
  • 是的,我可以做fallback:otherfallback,其实我忘了说,完全没有错误,唯一的问题是在AOT上我的对象是未定义的,而在JIT中没有。跨度>

标签: angular aot


【解决方案1】:

正如this issue 中所讨论的,ngc 是 AOT 上使用的编译器,在按设计处理元数据时不会评估对象文字中的展开运算符,即使它评估文字数组中的展开(如 stated on the link you provided 关于AOT 编译器)。

好消息是,很明显,这个问题已经在 ivy(新的 Angular 编译和渲染管道)上修复了,就像mentioned at the end of the issue above

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    相关资源
    最近更新 更多