ts笔记-模块
全局模块
在全局命名空间中定义的模块就是全局模块,示例:
// foo.ts
const foo = 123;
// bar.ts
const bar = foo;
以上这种方式编译是通过的,因为foo在全局命名空间中,所以其他任何文件都可以引用foo。显然这是危险行为。
文件模块
文件模块也被称为外部模块,当我们使用import/export导入导出模块时,他会在当前文件中创建一个本地作用域。
// foo.ts
const foo = 123;
export {}
// bar.ts
const bar = foo; // ERROR: "cannot find name 'foo'"
模块使用
js模块系统有多种实现方式,常见的规范有commonjs, amd, es modules
,AMD它仅能在浏览器工作,esmodule目前存在浏览器兼容问题,因此更推荐使用node推出的commonjs规范。
在ts中设置module:commonjs
,可以让我们像使用es modules一样使用commonjs。
// 导出一个变量或类型
const someVar = 123;
type someType = {
type: string;
};
export { someVar, someType };
// 导入模块
import 'core-js';
// 导入一个变量或类型
import { someVar, someType } from './foo';
默认导出
// some var
export default (someVar = 123);
// some function
export default function someFunction() {}
// some class
export default class someClass {}
模块路径
import导入支持相对路径和绝对路径,相对路径比较简单不做过多解释,绝对路径的查找顺序是下面这样的:
当你使用 import * as foo from 'foo',将会按如下顺序查找模块:
- ./node_modules/foo
- ../node_modules/foo
- ../../node_modules/foo
- 直到系统的根目录
当你使用 import * as foo from 'something/foo',将会按照如下顺序查找内容
- ./node_modules/something/foo
- ../node_modules/something/foo
- ../../node_modules/something/foo
直到系统的根目录
place
place解释了模块查找的方式,具体如下:
import foo from './foo'
如果place是一个文件,并且存在foo.ts,命中
如果place是一个文件夹,并且存在foo/index.ts,命中
如果place是一个文件夹,并且存在foo/package.json,并且文件中指定的types文件存在,命中
如果place是一个文件夹,并且存在package.json,并且文件中指定的main文件存在,命中
重写类型的动态查找
上面place介绍的查找方式,是可以人为修改的。我们可以定义一个global.d.ts
文件,修改它的查找位置。
// global.d.ts
declare module 'foo' {
// some variable declarations
export var bar: number;
}
// foo 是 { bar: number }
import * as foo from 'foo';
global.d.ts 文件,用来将一些接口或者类型放入全局命名空间里,这些定义的接口和类型能在你的所有 TypeScript 代码里使用。对于一些新手和没有声明的第三方库可以使用global.d.ts避免报错。
import/require
import foo = require('foo');
上面这行代码做了两件事:第一是导入foo 模块的所有类型信息,二是确定 foo 模块运行时的依赖关系。
如果没有foo当作变量声明空间使用,那么编译成js时候上面的导入代码会被自动移除。
// ts
import foo = require('foo');
// 编译为js,什么也没有
// foo当作变量声明空间使用(foo是一个包含类型声明的commonjs 模块的库,导入)
import foo = require('foo');
var bar: foo;
// 编译为js
let bar;
// foo当作变量使用,就会被当做包引入
import foo = require('foo');
const bar = foo;
// 编译为js
const foo = require('foo');
const bar = foo;
原文地址:https://www.cnblogs.com/yesyes/p/15394093.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用hooks重新定义antd pro想象力(一)
- 传智播客OA项目学习--阶段三(级联操作)
- 七日Python之路--第十一天
- 使用hooks重构antd pro的想象力(三)我是如何利用hooks干掉redux的
- 七日Python之路--第十天
- 初学Vue.js,用 vue ui 创建项目会不会被鄙视
- 十三、jQuery过时的今天,你还会使用它吗
- 0005 Java 包扫描实现和应用(Jar篇)
- python基础 -- acm
- 十四、深入核心,详解事件循环机制
- python基本 -- threading多线程模块的使用
- python基本 -- mysql 的使用
- python爬虫----(6. scrapy框架,抓取亚马逊数据)
- 十五、这一次,彻底弄懂Promise的使用
- python爬虫----(5. scrapy框架,综合应用及其他)