支持js的所有导出方式
export:导出声明或表达式(export {a,b,c}会被认为是声明列表而非对象),不能导出单独变量(如:export a)
export default:能导出单独变量
import为动态导入,即导入的内容在原模块变化,导入的内容也会更新,导入的内容只能修改其属性
import为静态编译
import多次导入相同模块路径,会被合并在一起
export和import都不能放在if分支里
当export和export default都存在时导入写法:import default导出变量,{export导出变量} from 'x'
(1)导出导入类型
任何声明(比如变量,函数,类,类型别名或接口)都能够通过添加export关键字来导出。
方式一:直接用import导入,基于导入省略的功能,存在副作用被擦去的问题
export interface {...};
export type a=c;
导入:import {x} from 'x.ts'
导入省略:
// ./foo.ts文件
interface Options {
// ...
}
export function doThing(options: Options) {
}
// ./bar.ts文件
导入省略:当 TypeScript 输出一个 JavaScript 文件时,TypeScript 会识别出 Options 仅仅是当作了一个类型来使用,它将会删除 Options
import { doThing, Options } from './foo.js';
function doThingBetter(options: Options) {
doThing(options);
doThing(options);
}
导入省略的缺陷:
import { MyThing } from './some-module.js'; 单从导入无法确定是否是类型,以及是否应该删除它
若含有副作用的模块:
import {someType} from '...'
当导入的模块只用作了类型,则会被省略,导致如果该模块中有其他如执行方法等副作用不会被执行
解决办法:再单独导入整个模块
import { SomeTypeFoo, SomeOtherTypeBar } from './module-with-side-effects';
import './module-with-side-effects';
方法二:添加type关键字,解决导入省略的缺陷
import type { Cat, Dog } from "./animal.js"; 表明只是类型的导入
import { createCatName, type Cat, type Dog } from "./animal.js"; 添加type前缀混用
(2)导出重命名
export {变量名 as 新变量名}
(3)导入外部模块再重新导出
外部模块:必须是export导出
export {变量名 as 若要取别名 } from '模块路径'
(4)支持CommonJS和AMD的exports, TypeScript提供了export =对象的语法,不能和其他export一起使用
对象:是对象,变量,类,接口,命名空间,函数或枚举
export=对象;
import x=require('路径') 或 import x from '路径' 两种方式都兼容node环境
当"esModuleInterop": true,配置开启时
(5)按需加载
if(布尔){
import('模块')
}else{
import('模块')
}
(6)只加载模块,不导入内容
import "./maths.js"; 导入后会执行该文件