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

TypeScript 之模块

但是这个语法能确保你在有 CommonJS 输出的 TypeScript 文件里,一个 1 对 1 的匹配: import fs = require("fs"); const code = fs.readFileSync...require 语句被导入: const maths = require("maths"); maths.pi; // any 复制代码 你可以使用 JavaScript 的解构语法简化一点代码: const...TypeScript 模块解析选项(TypeScript’s Module Resolution Options) 模块解析是从 import 或者 require 语句中取出字符串,然后决定字符指向的是哪个文件的过程...TypeScript 模块输出选项(TypeScript’s Module Output Options) 两个选项可以影响 JavaScript 输出的文件: target 决定了哪个 JS 特性会被降级...这个语法一系列的特性,可以用来创建复杂的定义文件,现在依然可以在 DefinitelyTyped 看到。

1.1K00

TypeScript 4.7 beta 发布:NodeJs 的 ES Module 支持、新的类型编程语法、类型控制流分析增强等

无法使用 __dirname, __filename,require 这些全局的变量或方法 因此在 4.7 版本,TypeScript 也将会读取这一配置字段来决定是否将文件作为 ESM 解析,以及如何查找这一文件导入的模块...类似的,现在如果你使用 import,它就会去 import 的地址寻找类型声明文件,反之则是 require,你仍然可以新增单独的 types 字段: { "name": "pkg",.../commonjs/index.cjs" } TypeScript 会在使用 ESM 导入时去 import.types指定的位置查找类型文件,而在 CJS 导入下去 require.types 查找类型文件...语句时将此文件视为一个模块,否则将其视为一个应用于全局的文件。...#esPrivateProp 这一类语句现在可以正确运行了。

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

89.精读《如何编译前端项目与组件》

webpack parcel gulp 生态的区别 babel 一般不会解析模块,也就是一般仅做代码预处理,而不会改变文件结构,也对 require、import 语句不敏感。...换句话说,无论项目使用了怎样的构建方式,怎样理解 import 语句,甚至写出 require.context 等自定义语法,只要最终编译出符合浏览器规范的代码(考虑到兼容性)就足够。...难道组件开发就不能获得与项目开发一样的体验?...2 精读 核心思想只有一句话:利用 webpack-node-externals 忽略 Webpack 对指向 node_modules 的 require 或 import 语句: 进行项目/组件调试时...自动生成字符串代码并利用 Blob URL 方式载入,这样就不需要创建新文件可以用 worker 了,也不会存在跨域问题)。

1K20

Node.js项目TypeScript改造指南

前言 如果你一个 Node.js 项目,并想使用 TypeScript 进行改造,那本文对你或许会有帮助。...@typescript-eslint/recommended 定义的规则 'env': {'node': true} } 由于 @typescript-eslint/recommended 的规则并不完善...TypeScript的import问题 安装完 Node 的声明文件后,之前的写法:const path = require('path')在 require 处仍然会报错,不过这次不是 TypeScript...提示你使用default导入或import require写法,当你改成default导入时:import moment from'moment'; moment(); ,则在导入语句处会提示: Module...对象属性赋值报错 动态对象是 js 的特色,我先定义个对象,不管啥时候我都可以直接往里面加属性,这种报错,最快的改造办法就是给对象申明 any 类型。

4.5K10

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

JavaScript 的模块是如何定义的 和 ECMAScript 2015 一样,TypeScript 会将任何包含顶层 import 或者 export 的文件视为一个模块。.../animal.js"; type Animals = Cat | Dog; TypeScript 为 import 语法拓展了两个用途,让它可以声明类型导入: import type 该导入语句只能导入类型...在大多数情况下,使用 ES 模块的导入与相同环境下使用 require 是一样的,但这个语法可以确保你的 TypeScript 文件和 CommonJS 输出存在一对一的匹配: import fs =...TypeScript 的模块解析选项 模块解析是一个过程,它指的是从 import 或者 require 声明中提取一个字符串,并确定该字符串所指示的文件。...这个语法提供了很多有用的特性以创建复杂的定义文件,并且仍然广泛应用于 DefinitelyTyped 中。

1.1K20

Node.js 项目 TypeScript 改造指南

前言 如果你一个 Node.js 项目,并想使用 TypeScript 进行改造,那本文对你或许会有帮助。...@typescript-eslint/recommended 定义的规则 'env': {'node': true} } 由于 @typescript-eslint/recommended 的规则并不完善...TypeScript的import问题 安装完 Node 的声明文件后,之前的写法:const path = require('path')在 require 处仍然会报错,不过这次不是 TypeScript...提示你使用default导入或import require写法,当你改成default导入时:import moment from'moment'; moment(); ,则在导入语句处会提示: Module...对象属性赋值报错 动态对象是 js 的特色,我先定义个对象,不管啥时候我都可以直接往里面加属性,这种报错,最快的改造办法就是给对象申明 any 类型。

8.2K32

Node.js项目TypeScript改造指南

前言 如果你一个 Node.js 项目,并想使用 TypeScript 进行改造,那本文对你或许会有帮助。...@typescript-eslint/recommended 定义的规则 'env': {'node': true} } 由于 @typescript-eslint/recommended 的规则并不完善...TypeScript的import问题 安装完 Node 的声明文件后,之前的写法:const path = require('path')在 require 处仍然会报错,不过这次不是 TypeScript...提示你使用default导入或import require写法,当你改成default导入时:import moment from'moment'; moment(); ,则在导入语句处会提示: Module...对象属性赋值报错 动态对象是 js 的特色,我先定义个对象,不管啥时候我都可以直接往里面加属性,这种报错,最快的改造办法就是给对象申明 any 类型。

4.3K20

写一个同事见了会打你的 Prettier 插件

最近写了一个 Prettier 插件,可以达到这样的效果: 同事每次保存代码的时候,import 语句的顺序都会随机变。 但是他去 prettier 配置文件里还啥也发现不了。...当然是每种语言各自的 parser 和 printer 呀!...如果 parse ts 和 jsx 代码,需要分别指定 typescript 和 jsx 插件。 sourceType 为 module 代表是 import 或者 export 的模块代码。...在 js/ts 文件中: 在 vue 文件中: 都生效了!(因为 prettier 插件缓存,不生效的话关掉再打开编辑器就好了) 至此,我们这个同事发现了会打你的插件完成了!...在格式化代码时加入一些自定义逻辑。 最后,文中的prettier插件的案例只是学习用,不建议大家把这种插件引入项目,否则后果自负[旺柴]。

94960

【译】Typescript 3.9 常用新特性一览

5.3 添加快速修复缺失的函数返回表达式 5.4 支持 "Solution Style" tsconfig.json 文件 6、一些重大变化 主要是在 TypeScript 定义和书写规范上的改动和修复以前的...1.1 全新的 awaited type awaited type 主要是对现在的 promise 更好的定义和使用。 预计在 **`3.9`** 发布的,结果微软又跳票了,可以等下一个版本了。...根据 Visual Studio Code 团队提供的建议,我们发现在执行文件重命名时,单是查明哪些导入语句需要更新就要耗去 5 到 10 秒时间。...导入,例如: const fs = require("fs"); TypeScript 现在能够自动检测您所使用的导入类型,保证文件样式简洁而统一。...现在有了如下自动引入的功能 const { readFile } = require('fs') 5.2 缺失的函数返回值的自动修复功能 在某些情况下,我们可能会忘记返回函数中的最后一条语句的值,尤其是在向箭头函数添加大括号时

1.3K20

揭秘 Rollup Tree Shaking

树上定义了代码的结构,通过操作这棵树,可以精准的定位到声明语句、赋值语句、运算语句等等。实现对代码的分析、优化、变更等操作。...其意义重大,rollup可以借助他判断变量是否为当前文件定义,否则为import导入,进而递归直到找到变量定义所在作用域,然后将依赖写入。...(是否已经包含在输出语句中) 收集每个语句定义的变量,创建作用域链 收集外部依赖的变量 // ....依赖的变量做修改操作 经过上述处理,已经基本实现简易tree-shaking功能,但是对于如下依赖文件中导出变量做过修改还需处理 // ....语句时的处理,对于入口文件定义但未使用变量时,还需处理 var company = 'sohu focus' var companyAge = 23 console.log(company) 过滤定义但未使用的变量

2.6K20

ASP.NET5之客户端开发:Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用Grunt和Gulp使用Grunt准备项目配置NPM配置Grunt集成起来监测文件变化与V

({ }); }; 在上文的方法中,添加clean任务,这个配置可以添加一个数组来定义要清理的目录或者文件 module.exports = function (grunt) {...监测文件变化 Watch任务可以监视文件和目录的变化,并且在监测到变化后触发一系列任务,在initConfig方法中添加以下的代码来监视Typescript目录下的所有js文件的变化,并执行’all“任务...NPM 包的不同 与grunt一样,gulp定义也在ackage.json文件的devDependencies属性中,内容如下文所示,你也可以通过只能提示来更新到最近的版本号。...,在这个文件中,使用node.js的方法require()为下文中的几个变量赋值 var gulp = require('gulp'); var clean = require('gulp-clean...'); var rename = require('gulp-rename'); var watch = require('gulp-watch'); 在赋值语句下方,调用gulp的task方法,第一个参数是任务的名字的字符串表示方式

3K70

模块_TypeScript笔记13

一.语法格式 TypeScript 兼容 ES Module 规范,文件即模块 简单来讲,如果一个文件中含有合法的import或export语句,就会被当做模块(拥有模块作用域),否则就将在运行在全局作用域下...(如d.ts)虽然不会生成实际意义的代码,但仍具有模块(作用域)隔离: // 上例会被编译成 define(["require", "exports"], function (require, exports...= x; module.exports = x; 改写成 TypeScript 的话是这样: let x = {a: 1}; export = x; // 会被编译成 define(["require...如果将来新版本 ES 规范中模块定义改动的话,还会新增es2019, es2020...等值,对应 ES 规范各个版本中的模块定义(如果模块定义没有改动的话,就不加) P.S.具体的模块生成示例,见Code.../MyModule'); // 同样具有正确的类型 m.f(); } 四.模块类型声明 对于缺少类型的第三方模块,可以通过声明文件(d.ts)为其补充类型声明 具体的,declare module

67520

你了解 Typescript

TypeScript比JavaScript更具开发效率,包括:静态类型检查、基于符号的导航、语句自动完成、代码重构等。 TS提供了类、模块和接口,更易于构建组件。...TypeScript 使代码更易阅读和理解。 Reddit说 要支持强类型。 要有很好的配套工具。 已经了成功案例。 我们的工程师可以很快上手。 能同时工作于客户端和服务器。 优秀的类库。...从JavaScript迁移到TypeScript不需要经过大改写。可以慢慢的、一次一个模块的迁移。 随便挑选一个模块,修改文件扩展名.js为.ts,然后逐步添加类型注释。...声明文件 大多数情况下,类型声明包的名字总是与它们在npm上的包的名字相同,但是@types/前缀: npm install -D @types/node 这里我们参考node.d.ts中的require...,在我们在typescript中使用require的时候,若无安装@types/node或是自己声明,会报错的: // 声明require declare var require: NodeRequire

5.5K10

TS 4.5 最新发布!新的扩展名、新语法、新的工具类型

类似的,现在如果你使用 import,它就会去 import 的地址寻找类型声明文件,反之则是 require,你仍然可以新增单独的 types 字段: { "name": "pkg", "exports...ts-loader babel esbuild 这一类的工具来说,它们通常是单个文件进行处理的(TypeScript的 transpileModule API 也是),不像 tsc 那样预处理器收集源文件...因此当启用 --isolatedModules 时存在着一定限制: 每个文件都必须是模块,即要么 import,要么 export 类型导入不能再导出(re-export),因为类型代码实际上在编译期会被移除掉...,需要分成两个导入语句,如果强迫症犯了,你可能还要专门把文件的导入语句归类下,比如 // 类型导入 import type { CompilerOptions } from "typescript" import...这一提案也可以用在: 重导入语句中,如export { val } from '.

1.3K30

快速学习TypeScript——模块

/my-module.js"; 复制代码 默认导出 每个模块都可以一个default导出。 默认导出使用 default关键字标记;并且一个模块只能够一个default导出。...省略掉没有用到的引用对性能提升是很有益的,并同时提供了选择性加载模块的能力 这种模式的核心是import id = require("...")语句可以让我们访问模块导出的类型。...它们通常是在 .d.ts文件定义的。 如果你熟悉C/C++,你可以把它们当做 .h文件。 让我们看一些例子 外部模块 在Node.js里大部分工作是通过加载一个或多个模块实现的。...我们可以使用顶级的 export声明来为每个模块都定义一个.d.ts文件,但最好还是写在一个大的.d.ts文件里。...通过将类型层次地组织在命名空间里,可以方便用户找到与使用那些类型。 然而,模块本身已经存在于文件系统之中,这是必须的。 我们必须通过路径和文件名找到它们,这已经提供了一种逻辑上的组织形式。

1.2K10

通过核心概念了解webpack工作机制

loader 可以文件从不同的语言(如 TypeScript)转换为 JavaScript,或将内联图像转换为 data URL。...上面的配置代表, 当webpack编译器解析时, 遇到 require()/import 语句'.css'路径时,在打包之前先用 css-loader 转换一下;遇到 require()/import...语句'.ts'路径时,在打包之前先用 ts-loader 转换一下 使用Loader的三种方式: 1.配置: 在 webpack.config.js 文件中指定 loader。...通常使用 npm 进行管理,但是也可以将自定义 loader 作为应用程序中的文件。按照约定,loader 通常被命名为 xxx-loader(例如 json-loader)。...使用某个插件,只需要require(),然后添加到 plugins 数组中.多数插件可以通过选项(option)自定义,也可以在一个配置文件中因为不同目的而多次使用同一个插件,这时需要通过使用 new

96880

旧项目TypeScript改造问题与解决方案记

预期目标是直接将TypeScript代码通过loader直接编译为ES5的代码。 本文中涉及的问题部分是TypeScript配置和使用的问题,也有部分是VSCode本身配置相关问题。...这是因为TypeScript不允许增加没有声明的属性。 因此,我们两个办法来解决这个报错: 在对象中增加属性定义(推荐)。具体方式为:let a = {b: void 0};。...在对象中添加类型定义(推荐)。...因此,我们解决这个问题的思路两种: 1. 在`tsconfig.json`配置文件中增加lib。让TypeScript能够知道当前的代码容器。...我们可以通过如下方法来添加声明文件: 1. 增加@types文件。这个方式针对于一些比较出名的类库可以使用此方法。 2. 在.d.ts文件中增加声明,这个声明全局有效。

4.9K10

深入理解 TypeScript 模块

tsconfig.json 文件什么用,自定义模块别名 @/* 是如何映射到指定目录的? 带着这些问题,我们开始今天的探索之旅! 2....的 Node 模块解析和 Node.js 何区别 当使用 Node 模块解析策略是,TypeScript 是模仿 Node.js 运行时的解析策略来在编译阶段定位模块定义文件。...通常 tsconfig.json 文件主要包含两部分内容:指定待编译文件定义编译选项。 tsconfig.json 的配置项可以用一张图来简单进行说明: ?...总结 ---- 这篇文章讲述了 TypeScript 模块的概念及使用方式,知道了怎么定义一个全局模块和一个文件模块。...并且详细描述了 TypeScript 模块解析的流程,解析过程中文件的优先级策略等等,让大家对 TypeScript 模块了一个全面的认识。

2.5K30
领券