首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

TypeScript 官方手册翻译计划【十三】:模块

一个脚本文件中声明变量和类型会位于共享全局作用域中,而且通常情况下,你会使用 outFile 编译选项将多个输入文件合并为一个输出文件,或者使用 HTML 文件中多个 标签去(...TypeScript模块 TypeScript 中编写基于模块代码时,有三件主要事情需要考虑: **语法:**我想要使用什么语法去进行导入和导出?.../animal.js"; type Animals = Cat | Dog; TypeScript 为 import 语法拓展了两个用途,让它可以声明类型导入: import type 该导入语句只能导入类型...大多数情况下,使用 ES 模块导入与相同环境下使用 require 是一样,但这个语法可以确保你 TypeScript 文件和 CommonJS 输出存在一对一匹配: import fs =...模块之间所有通信通过一个模块加载器进行,编译选项 module 会决定应该使用哪一个。在运行时,模块加载器负责执行模块之前定位并执行模块所有依赖。

1.1K20

TypeScript系列教程十《模块

脚本文件中,变量和类型被声明为共享全局范围内,并且假设您将使用–outFile编译器选项将多个输入文件连接到一个输出文件中,或者HTML中使用多个 如果您文件当前没有任何导入或导出,但希望将其视为模块...无论您模块目标是什么,此语法都有效。 TypeScript模块 TypeScript编写基于模块代码时,需要考虑三个主要问题: 语法: 我想使用什么语法来导入和导出内容?.../animal.js"; type Animals = Cat | Dog; TypeScript使用import type扩展了导入语法,该导入类型是只能导入类型导入。...大多数情况下,使用ES模块导入与来自这些环境需求相同,但此语法确保您TypeScript文件与CommonJS输出具有1对1匹配: import fs = require("fs"); const...模块之间所有通信都通过模块加载器进行,编译器标志模块确定使用哪个模块。在运行时,模块加载器负责执行模块之前定位和执行模块所有依赖项。

1.5K10
您找到你想要的搜索结果了吗?
是的
没有找到

Angular 2 TypeScript 环境配置(上)

本章节使用TypeScript 来创建 Angular 应用,这也是官方推荐使用,本教程实例也将采用 TypeScript 来编写。...TypeScript 是一种由微软开发自由和开源编程语言,它是JavaScript一个超集,扩展了JavaScript语法。...如果你不了解TypeScript,可以查阅以下资料: TypeScript 入门教程 TypeScript 中文手册 这开始前,你需要确保你已经安装了 npm,如果你还没安装npm或者不了解 npm 可以查看我们教程...typings.json为那些 TypeScript 编译器无法识别的库提供了额外定义文件。...systemjs.config.js 为模块加载器提供了该到哪里查找应用模块信息,并注册了所有必备依赖包。 它还包括文档中后面的例子需要用到包。

1.3K10

TypeScript模块

一个脚本文件中,变量和类型会被声明共享全局作用域,它会被假定你或者使用 outFile 编译选项,将多个输入文件合并成一个输出文件,或者 HTML使用多个 标签加载这些文件。...TypeScript模块(Modules in TypeScript TypeScript 中,当写一个基于模块代码时,有三个主要事情需要考虑: 语法:我想导出或者导入该用什么语法?...TypeScript 具体 ES 模块语法(TypeScript Specific ES Module Syntax) 类型可以像 JavaScript 值那样,使用相同语法被导出和导入: // @.../animal.js"; type Animals = Cat | Dog; 复制代码 TypeScript 已经两个方面拓展了 import 语法,方便类型导入导入类型(import type)...导入类型和内置类型导入区别在于一个是导入语法,一个是仅仅导入类型CommonJS 行为 ES 模块语法(ES Module Syntax with CommonJS Behavior) TypeScript

1.1K00

TypeScript 模块导入那些事

ES6 模块导入限制 我们先来看一个具体例子: Node 项目里,使用 CommonJS 规范引入一个模块: const koa = require('koa') 复制代码 改写为 TypeScript...2.7 版本对 CommonJs/AMD/UMD 模块导入增强 之前版本,TypeScriptCommonJs/AMD/UMD 模块处理方式与 ES6 模块相同,这会导致一些问题: 如前文所提到... 2.7 版本里,TypeScript 提供了一个新选项 --esModuleInterop,旨在解决上述问题, 当使用该选项,且模块CommonJs/AMD/UMD 时,它会导入一个可调用或是可实例化模块...,同时它规定该模块必须作为默认导入: import koa from 'koa' const app = new koa() 复制代码 模块导入仅仅是一些声明类型 以非相对路径导入一个模块时,你可能会看到...当你加载模块,但并没有使用,或仅当作类型来使用时,编译后,此模块将会被移除。

1.9K30

ECMAScript Modules Node.js 中支持与使用

通过 package.json 区分模块类型 ECMAScript Modules 由于具体实现上与之前 CommonJS 有较大区别,因此使用时是需要对两种情况进行区分。.../node_modules/commonjs-package/index.js'; // 以 CommonJS 加载,因为 .cjs 后缀即代表该模块遵循 CommonJS 规范. import '....导入模块时需要提供文件拓展名 CommonJS 时代,我们导入模块时无需书写文件后缀,而是由 Node.js 自行通过 extensions 来加载指定文件。...而在 ES Modules 规范下,导入一个模块时,我们需要提供确切文件拓展名。 这一点虽然对比现在方案缺失了灵活性,但却使得整体模块依赖关系可以在编译时就确定,而不需要等到运行时。...基于 URL 文件路径 文件路径上,ES Modules 解析与缓存是基于 URL 规范。 这也就意味着,模块实际上是可以携带查询参数,且当查询参数不同时,Node 会重新加载模块

3K30

现代 JavaScript 库打包指南

umd 是“Universal Module Definition”缩写,它可以 标签中执行、被 CommonJS 模块加载加载、被 AMD 模块加载加载。...或许将来某一天,你库只需要输出 esm。 你可能已经注意到,umd 已经与 CommonJS 模块加载器兼容 —— 所以为什么还要同时具备 cjs 和 umd 输出呢?...此外,不使用 TypeScript 开发者使用支持类型编辑器(例如 VSCode,它使用类型来支持其 Intellisense 功能)时也会获得更好 DX。...但是,创建类型并不意味着你必须使用 TypeScript 来编写你库。 一种选择是继续源代码中使用 JavaScript,然后通过 JSDoc 注释来支持类型。...请注意,你可以通过几个技巧项目中混用模块类型: .mjs 文件总是 ESM 模块,即使你 package.json 有 "type": "commonjs"(或者没有 type) .cjs 文件总是

2.3K20

Angular2 初体验

首先在 HTML 页面中添加 Angular2 UMD 版本 js 文件引用, 代码如下: <script src="node_modules/<em>rxjs</em>/bundles/Rx.umd.min.js...Universal Module Definition, 符合 UMD 定义<em>的</em> Javascript <em>模块</em>可以在任意<em>的</em> Javascript 环境中执行。...<em>TypeScript</em> 最终会被编译成 JavaScript <em>的</em><em>模块</em> (<em>commonjs</em>/amd/system) , 因此需要一个<em>模块</em><em>加载</em>器, 官方使用<em>的</em>是 SystemJS, 因此我们要安装 SystemJS...<em>模块</em>: npm install systemjs --save 还需要 <em>TypeScript</em> 编译器, gulp、 gulp-<em>typescript</em> 来实现 ts 文件<em>的</em>自动编译: npm install...<em>typescript</em> gulp gulp-<em>typescript</em> --save-dev 完整<em>的</em> package.json 可以<em>在</em>我<em>的</em> github 项目中查看。

1.6K20

如何规范地发布一个现代化 NPM 包?

umd 是“Universal Module Definition”缩写,它可以 标签中执行、被 CommonJS 模块加载加载、被 AMD 模块加载加载。...或许将来某一天,你库只需要输出 esm。 你可能已经注意到,umd 已经与 CommonJS 模块加载器兼容 —— 所以为什么还要同时具备 cjs 和 umd 输出呢?...此外,不使用 TypeScript 开发者使用支持类型编辑器(例如 VSCode,它使用类型来支持其 Intellisense 功能)时也会获得更好 DX。...但是,创建类型并不意味着你必须使用 TypeScript 来编写你库。 一种选择是继续源代码中使用 JavaScript,然后通过 JSDoc 注释来支持类型。...请注意,你可以通过几个技巧项目中混用模块类型: .mjs 文件总是 ESM 模块,即使你 package.json 有 "type": "commonjs"(或者没有 type) .cjs 文件总是

2.1K20

现代 JavaScript 库打包指南

umd 是“Universal Module Definition”缩写,它可以 标签中执行、被 CommonJS 模块加载加载、被 AMD 模块加载加载。...或许将来某一天,你库只需要输出 esm。 你可能已经注意到,umd 已经与 CommonJS 模块加载器兼容 —— 所以为什么还要同时具备 cjs 和 umd 输出呢?...此外,不使用 TypeScript 开发者使用支持类型编辑器(例如 VSCode,它使用类型来支持其 Intellisense 功能)时也会获得更好 DX。...但是,创建类型并不意味着你必须使用 TypeScript 来编写你库。 一种选择是继续源代码中使用 JavaScript,然后通过 JSDoc 注释来支持类型。...请注意,你可以通过几个技巧项目中混用模块类型: .mjs 文件总是 ESM 模块,即使你 package.json 有 "type": "commonjs"(或者没有 type) .cjs 文件总是

85910

现代 JavaScript 库打包指南

umd 是“Universal Module Definition”缩写,它可以 标签中执行、被 CommonJS 模块加载加载、被 AMD 模块加载加载。...或许将来某一天,你库只需要输出 esm。 你可能已经注意到,umd 已经与 CommonJS 模块加载器兼容 —— 所以为什么还要同时具备 cjs 和 umd 输出呢?...此外,不使用 TypeScript 开发者使用支持类型编辑器(例如 VSCode,它使用类型来支持其 Intellisense 功能)时也会获得更好 DX。...但是,创建类型并不意味着你必须使用 TypeScript 来编写你库。 一种选择是继续源代码中使用 JavaScript,然后通过 JSDoc 注释来支持类型。...请注意,你可以通过几个技巧项目中混用模块类型: .mjs 文件总是 ESM 模块,即使你 package.json 有 "type": "commonjs"(或者没有 type) .cjs 文件总是

88330

前端-学习JavaScript是一种什么样体验?

哦,什么是模块管理器…… 不同平台模块管理器不同啦。前端模块管理器一般指管理 AMD 或者 CommonJS 模块东西。 好……吧,什么是 AMD 和 CommonJS? 是两个定义。...是一个工具,用来将 CommonJS 形式 JS 文件打包起来,放到浏览器里运行。用 npm 仓库的人发明了 CommonJS。 npm 仓库是什么…… 是一个公开仓库,用于放置可依赖模块。...对。我举个例子吧,如果你要使用 React,你直接用 npm 安装 React,然后代码里导入 React 就可以了。大部分 JS 库都能这么安装。 嗯,Angular 也可以。...Webpack 告诉你应该如何管理你依赖,Webpack 允许你使用不同模块管理器,不只是 CommonJS,甚至支持 ES6 模块。 这都是哪跟哪啊,我都被绕晕了。...ES2016+ 已经是 ES6 超集了,怎么又冒出来一个 Typescript? 是这样Typescript 能让我们写出「强类型 JS,从而减少运行时错误。

1.1K30

快速学习TypeScript——模块

TypeScript也沿用这个概念 模块在其自身作用域里执行,而不是全局作用域里;这意味着定义一个模块变量,函数,类等等模块外部是不可见,除非你明确地使用export形式之一导出它们。...模块使用模块加载器去导入其它模块。...大家最熟知JavaScript模块加载器是服务于Node.js CommonJS和服务于Web应用Require.js TypeScript与ECMAScript 2015一样,任何包含顶级import...变量,这个变量包含了一个模块所有导出内容 CommonJS和AMDexports都可以被赋值为一个对象, 这种情况下其作用就类似于 es6 语法里默认导出,即 export default语法了。...TypeScript里,使用下面的方式来实现它和其它高级加载场景,我们可以直接调用模块加载器并且可以保证类型完全 编译器会检测是否每个模块都会在生成JavaScript中用到。

1.2K10

rollup从0到1

因为需要使用到 ts, 模块化,所以就存在模块编译打包问题, 现有的打包工具中,webpack , Parcel 更偏向多类型资源 web应用打包, 对于纯粹npm工具包来说 rollup 更简单实用...Rollup 对代码模块使用新标准化格式,这些标准都包含在 JavaScript ES6 版本中,而不是以前特殊解决方案,如 CommonJS 和 AMD。...外链, 忽略部分依赖 { external: ['vue'] } globals 全局模块, 为类似 jquery 挂载全局对象上模块指定挂载点 globals: { jquery: '...将commonjs模块转换为 ES6 模块, 当我们导入commonjs 包时, commonjs 模块无法直接被rollup解析,需要先转换为ES6 模块。...useTsconfigDeclarationDir:false, // 导入无法被映入ts模块 typescript: '', transformers: '' } @rollup/

2K10

新时代前端农民工应该怎么准备面试(二)

标准[23]以及 Node.js CommonJS 模块[24],两者主要区别如下所示: 类型 ES Module CommonJS 加载方式 编译时 运行时 引入性质 引用 / 只读 浅拷贝...CommonJS 相对于 ES Module 加载模块方式上存在明显差异,是因为 CommonJS 在运行时进行加载方式动态解析,在运行时阶段才能确定导入导出关系,因此无法进行静态编译优化和类型检查...,而 CommonJS 规范中模块是在运行时同步顺序执行,模块加载过程中不会被中断,具体如下图所示: 上图中 main.js 在运行加载 counter.js 时,会先等待 counter.js...运行完成后才能继续运行代码,因此 CommonJS模块加载是阻塞式。...CommonJS 采用同步阻塞式加载模块是因为它只需要从本地文件系统中加载文件,耗费性能和时间很少,而 ES Module 浏览器(注意这里说是浏览器)中运行时候需要下载文件然后才能进行实例化和运行

74810

Angular 5.0.0发布!

TypeScript转换是TypeScript 2.3新增一个特性,可以让我们深入到标准TypeScript编译管道。 在打开AOT标签情况下,运行 ng serve就可以利用上述机制。...此前,如果检测到延迟加载路由,而且你 tsconfig.json中手工指定了一组 files或 include,那这些路由会自动化处理。而如今,根据TypeScript规范,我们不再这么干了。...默认情况下,CLI对TypeScript配置中没有 files或 include,因此多数开发者不会受影响。...这个新发布RxJS可以让开发完全摆脱之前导入机制副作用,因为我们以新lettable operators方式使用了RxJS。...这些事件可在有子组件更新时,一个特定路由器出口上展示加载动画,或者测量性能。

4.3K40

使用Typescript和ES模块发布Node模块

请注意,这不是我们要编写模块系统,而是TypeScript编译器输出代码时将使用模块系统。...发布模块时我喜欢做事情是发布两个版本: 带有ES模块现代版本,以便捆绑工具可以巧妙地将未使用代码tree–shake ,因此支持ES模块浏览器只需导入文件 使用CommonJS模块版本(如果在...这是可以预期:我们ES模块中编写了我们代码,并告诉TypeScript也要以这种形式输出。...发布类型定义 我们可以通过要求TypeScript写代码同时发出一个声明文件来解决类型信息问题。这个文件结尾是 .d.ts,它将包含关于我们代码类型信息。...如果你 files entry 中提供目录,则默认情况下会包含其所有文件和子目录,因此你不必全部列出。 提示:如果要查看模块中将包含哪些文件,请运行 npx pkgfiles 以获得列表。

2.5K20
领券