gpt4 book ai didi

javascript - TypeScript - 她一定要拥有它? (它 == 全局范围)

转载 作者:数据小太阳 更新时间:2023-10-29 05:15:26 24 4
gpt4 key购买 nike

我正在将 Angular 应用程序转换为使用 TypeScript,但这是一个一般的 TypeScript 问题,与 Angular 无关。 Angular js 文件是沿着这些线的:

(function () {
var app = angular.module('myModule', []);
app.controller('myController', ['$scope',
function ($scope) {
$scope.myNewProperty = "Bob";
}
]);
})();

我已将其转换为可爱的 TypeScript 类语法:

class myController {
constructor($scope) {
$scope.myNewProperty = "Bob";
}
}

angular.module('myModule', []).controller("myController", myController);

一切正常,除了生成的 JS 没有根据 JS 模块模式包装(即在外部匿名函数中):

var myController =     (function () {
app.controller('myController', ['$scope',
function ($scope) {
$scope.myNewProperty = "Bob";
}
]);
})();

var app = angular.module('myModule', []);

所以 myController 现在是全局的。如果我将类放在 TypeScript 模块中,那么 js 会生成模块名称作为全局变量:

var TsModule;
(function (TsModule) {
var myController = (function () {
app.controller('myController', ['$scope',
function ($scope) {
$scope.myNewProperty = "Bob";
}
]);
})();

var app = angular.module('myModule', []);
})(TsModule || (TsModule = {}));

如何阻止 TypeScript 以这种方式污染全局范围?我只想把它全部包裹在一个不错的本地范围内。我在别处看到它说“只要回到旧的 JS 语法”(即没有 TypeScript 类)。 How can I define an AngularJS service using a TypeScript class that doesn't pollute the global scope?

但我们使用 TypeScript 的重点/是/类语法。 TypeScript 是否与任何知道不要全局化的(明智的)JS 程序员不一致?

最佳答案

你可以简单地将你的类包装在一个模块

模块本身将是全局的,但如果您不导出类,则无需担心单个模块名称会污染全局范围。

所以这个 typescript :

module MyModule {
class MyClass {
constructor(){}
}
}

会产生如下JS:

var MyModule;
(function (MyModule) {
var MyClass = (function () {
function MyClass() {
}
return MyClass;
})();
})(MyModule || (MyModule = {}));

关于javascript - TypeScript - 她一定要拥有它? (它 == 全局范围),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27404800/

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