如果我在打字稿中使用 `module("somelib")`,它就无法在浏览器中运行

2024-02-12

我正在尝试在客户端使用带有 angularjs 的打字稿。

我发现如果我使用外部模块,生成的js将无法在浏览器中运行。

控制器.ts

/// <reference path="./libs/underscore.d.ts"/>

import _ = module("underscore");

module test {
    export class Ctrl {

        constructor($scope:any) {
            $scope.name = "Freewind";
            _.each($scope.name, function(item) {});
        }
    }
}

生成的js将是:

var _ = require("underscore")
var test;
(function (test) {
    var Ctrl = (function () {
        function Ctrl($scope) {
            $scope.name = "Freewind";
            _.each($scope.name, function (item) {
            });
        }
        return Ctrl;
    })();
    test.Ctrl = Ctrl;    
})(test || (test = {}));

从而无法正确运行。但如果我删除module("underscore")部分,就可以了。

由于我在 HTML 中添加了 underscore.js,我认为这应该是有问题的require()方法。如何修复它?


有两种方法可以在 HTML 页面中加载内容。

Bundling

第一个是手动包含页面中的所有脚本文件。您可能会运行某种预发布步骤来合并和缩小您的代码 - 但您要对此负责,而不是将其留给代码来做。这通常称为捆绑。

在捆绑的情况下,您只在 TypeScript 代码中使用引用(而不是导入),如下所示:

/// <reference path="./libs/underscore.d.ts"/>

module test {
    export class Ctrl {

        constructor($scope:any) {
            $scope.name = "Freewind";
            _.each($scope.name, function(item) {});
        }
    }
}

模块加载

如果您想使用模块加载器(对于 Web 来说通常是 RequireJS),您可以使用 import 语句加载外部模块。通常在这种情况下你不需要参考......

import _ = module("./libs/underscore");

module test {
    export class Ctrl {

        constructor($scope:any) {
            $scope.name = "Freewind";
            _.each($scope.name, function(item) {});
        }
    }
}

RequireJS 与非模块

还有第三种情况,这种情况很常见。如果您打算导入不是外部模块的东西 http://www.stevefenton.co.uk/Content/Blog/Date/201302/Blog/Using-RequireJS-and-Jquery-In-TypeScript/(例如 jQuery,但下划线也可能适合这种模式),您最好使用对 RequireJS 的引用和手动调用。

RequireJS 将为您加载依赖项,因此您可以用它包装您的主程序(可能位于一个单独的文件中,例如app.ts.

///<reference path="./libs/require.d.ts" />
///<reference path="./libs/underscore.d.ts" />

module test {
    export class Ctrl {

        constructor($scope:any) {
            $scope.name = "Freewind";
            _.each($scope.name, function(item) {});
        }
    }
}

require(['underscore'], function (_) {
    var ctrl = new test.Crtl({});
});

您还可以使用require.config指定应用程序中下划线的路径。

  require.config({
    paths: {
        "underscore": "libs/underscore"
    }
  });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果我在打字稿中使用 `module("somelib")`,它就无法在浏览器中运行 的相关文章

随机推荐

  • C++ 从 const int* 到 int* 的转换会产生意想不到的结果[重复]

    这个问题在这里已经有答案了 在c 中 我们知道我们不能将const int 转换为int 但我有一个代码片段 可以将 const int 转换为 int 我是 C 的初学者 我在 google 上搜索了这个 但我刚刚得到了提到 const
  • Angular 应用程序中的空注释

    是否有任何配置设置可以删除这些空注释和空格 我的构建命令是ng build environment prod progress false target productiontsconfig 是 compileOnSave false co
  • Mysql 在键上连接两个表

    我正在尝试连接两个表 但似乎遇到问题 我正在寻找的输出是有主题的行数 SELECT FROM education AS a JOIN keys2 AS b USING List Idsubjek WHERE List Idsubjek IN
  • 在 C++ 中使用类似 C 的初始化或构造函数初始化是否被认为更好? [复制]

    这个问题在这里已经有答案了 可能的重复 什么时候应该使用直接初始化 什么时候应该使用复制初始化 https stackoverflow com questions 4293596 when should you use direct ini
  • Django Memcached 缓存消失

    我的 Django 应用程序配置了 memcached 一切都运行顺利 我试图随着时间的推移填充缓存 并在新数据从外部 API 传入时添加到缓存中 这是我正在进行的事情的要点 主视图 api query more results apiQu
  • WPF C# 设计问题中绘制图表

    一个月前 我有一个项目 我使用 Windows 窗体在应用程序中绘制了股票图表 我通过创建一个可以拉伸到窗口尺寸的位图来做到这一点 这将允许我的图表随窗口调整大小 我现在正在使用 WPF 扩展该项目 我一直在尝试为该项目进行设计 但我似乎不
  • C/C++ 中的指针帮助 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想了解 C 和 C 中的指针 它如
  • 如何在 VueJS 中测试全局事件总线

    In this article https medium com vuejobs create a global event bus in vue js 838a5d9ab03a解释了如何在 VueJS 中使用全局事件总线 它描述了使用在单
  • 从命令提示符创建 apk 文件

    我想从命令提示符创建 apk 文件 为此我遵循这个链接 http developer android com guide developing building building cmdline html 并尝试用 ant 完成它 但它给了
  • Python while循环输出到List

    我编写了一个简单的代码 它将 wav 文件作为输入 然后查找频率并返回相应的音符 但是 为了添加更多功能 我需要输出为列表 我所拥有的简化伪代码如下所示 while some condition true compute various t
  • 是否可以使用 sha1 和 sha256 证书对安装程序和卸载程序进行双重签名?

    Inno Setup 中是否可以同时使用 sha1 和 sha256 对卸载程序和安装程序进行签名 我知道它是可以签署 https stackoverflow com a 30671378 1329977通过命令工具具有两个证书的可执行文件
  • 如何解决 Gradle 构建中的存储库证书错误

    我安装了最新版本的android studio 我已经安装了jdk 8 当我打开 android studio 时 出现以下错误 Unable to resolve dependency for app debugUnitTest comp
  • 动画背景java游戏

    我正在编写一个类似于小行星的游戏 但我不明白如何在后台生成小行星 现在我在主类中生成了一个小行星 但我想为小行星创建一个类 我该怎么做 主班 public void paintComponent Graphics g super paint
  • 使用鼠标在 openGL 中移动绘图

    我试图在按住鼠标左键的同时在 openGL 中移动图像 我不想拖动物体 只是移动整个图片 它是分形的二维绘图 我被告知我可以使用 gluortho2d 但我找不到任何信息或类似的尝试如何做到这一点 我假设类似的事情 void mouse c
  • log4j休眠错误

    配置休眠时出现此错误 log4j WARN No appenders could be found for logger org hibernate cfg annotations Version log4j WARN Please ini
  • 如何将 Groovy 类导入 Jenkinsfile?

    如何在 Jenkinsfile 中导入 Groovy 类 我尝试了几种方法 但没有一个有效 这是我要导入的类 Thing groovy class Thing void doStuff 这些是行不通的事情 Jenkinsfile 1 nod
  • 如何在 application.yaml 中设置 logback.xml 属性

    I have logback xml像这样
  • 将小数字加载到 64 位 x86 寄存器中

    在 64 位 x86 CPU 下 通常我们将数字 1 加载到寄存器中 如下所示 mov rdx 1 48BAFFFFFFFFFFFFFFFF 该指令按照旧版本 NASM 的组装方式占用 10 个字节 另一种方法是 xor rdx rdx 4
  • MySQL服务器和MySQL客户端有什么区别

    在 Ubuntu 中 我通常安装两者 但是 MySQL 的客户端和服务器之间有什么区别 另外 当一个新的声明提到它需要 MySQL 5 x 时 它是指客户端 服务器还是两者都需要 例如这个链接https dev mysql com doc
  • 如果我在打字稿中使用 `module("somelib")`,它就无法在浏览器中运行

    我正在尝试在客户端使用带有 angularjs 的打字稿 我发现如果我使用外部模块 生成的js将无法在浏览器中运行 控制器 ts