在没有 require() 的情况下使用 typescript 模块

Posted

技术标签:

【中文标题】在没有 require() 的情况下使用 typescript 模块【英文标题】:Using typescript module without require() 【发布时间】:2017-11-05 01:44:31 【问题描述】:

我编写了一个 typescript 2.3 app.ts,它需要 Vuejs 库 v2。 Vuejs 脚本 src 是在 html 文件中手动添加的。 我只想使用 Vuejs 进行类型检查! 我希望我只需要像这样引用:

///

Vue 类无法从 app.ts 访问。

我尝试直接导入模块:

从 "./vue" 导入 * as Vue;

这次我必须使用 new Vue.Vue() 来访问该类,但 VS 2017 构建。 生成的 app.js 以 var Vue = require("./vue"); 开头。 但是在浏览器中,我遇到了一些错误:

exports 参考(通过在 .ts 的第 1 行添加 export = 0; 解决 require 不是函数

对于 require(),我添加了 但新的错误:尚未加载上下文.

我尝试使用 systemjs 而不是 require.js,我添加了 System.import('scripts/app.js'); 我得到一个 404 访问“脚本” /vue”(来自 app.js 的要求),app.js 的其余部分不执行。

注意:我不使用 tsconfig.json

我很惊讶,因为在我的记忆中,jQuery 的引用与 typescript 0.9 一起使用

我完全迷路了。帮我 !感谢社区!

【问题讨论】:

【参考方案1】:

我通常通过创建 globals.d.ts 文件来解决您遇到的问题,该文件负责设置我的代码所期望的全局环境。在你的情况下是这样的:

import * as _Vue from "vue";

declare global 
    const Vue: typeof _Vue;

这使得编译器将在全局空间中看到一个Vue 符号,该符号与“vue”模块导出的类型相同。

使用上面的文件,编译:

const q = new Vue();

请注意,您要么必须使用tsconfig.json。即使是空的也可以。 (“空”是指仅包含空 JSON 结构的文件:。)或者您必须在命令行中列出所有要编译的文件,包括 globals.d.ts

【讨论】:

我喜欢这个方法。const q=new Vue() 不会构建,但new Vue.Vue 可以,而且我有智能感知。这就产生了一个问题:生成的 JS 文件保留不正确的 Vue.Vue 表示法(file2.ts:10 Uncaught TypeError: Vue.Vue is not a constructor)。

以上是关于在没有 require() 的情况下使用 typescript 模块的主要内容,如果未能解决你的问题,请参考以下文章

Winston:尝试在没有传输的情况下写入日志

如何在没有作曲家的情况下使用PHP库(FPDI与FPDI保护)

如何在没有 <reference> 的情况下在 TypeScript 中导入带有“Typings”的模块?

如何在不使用require_once的情况下自动加载和调用独立的PHP类?

如何在没有 !important 的情况下使用不同的类覆盖 css

在没有 webpack 的情况下使用 ActionText