gpt4 book ai didi

javascript - 模块合并 - 它是如何工作的?

转载 作者:行者123 更新时间:2023-12-02 15:40:52 27 4
gpt4 key购买 nike

我创建了简单的 typescript 文件 - playground link

module Animals {
export class Zebra { }
}
module Animals {
export interface Legged { numberOfLegs: number; }
export class Dog { }
}

从我的 Angular 来看,它相当于:

module Animals {
export class Zebra { }
export interface Legged { numberOfLegs: number; }
export class Dog { }
}

并且应该生成:

var Animals;
(function (Animals) {
var Zebra = (function () {
function Zebra() {
}
return Zebra;
})();
Animals.Zebra = Zebra;
var Dog = (function () {
function Dog() {
}
return Dog;
})();
Animals.Dog = Dog;
})(Animals || (Animals = {}));

但是在 Playground 中,您可以看到它生成了两个 Animals 变量,即将其视为单独的命名空间。

正确吗?根据handbook它应该合并...

编辑

根据定义文件(d.ts)的旁注 - 当我使用 --declaration 开关运行 tsc 时,会生成以下定义。动物模块包含两次。这是对的吗?

declare module Animals {
class Zebra {
}
}
declare module Animals {
interface Legged {
numberOfLegs: number;
}
class Dog {
}
}

最佳答案

But in the playground you can see that it generates two Animals variables, i.e. treated it as separate namespace.

它确实生成了两个变量(原因请参见“为什么生成两个函数而不是一个”link)。然而它仍然是一个单一命名空间(注意Animals ||(Animals = {} 意味着它会继承以前的值(如果可用))。

According handbook it should be merged

它们被合并了。生成的代码确保(使用 Animals || (Animals = {}))Animals第一个模块声明继续执行。手册没有说明它如何管理此合并( this does )。

关于javascript - 模块合并 - 它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32595968/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com