TypeScript 模块

简介:

首先介绍2个关键字 : export(导出,让其他模块可以导入使用)  和  import(导入)

先可以这么理解 : 一个TS文件就是一个模块。现在有一个需求 : A模块要使用B模块中的内容 , 也就是代码复用问题。

wKiom1mf09yx-InuAABbeBuJri0349.png-wh_50

其中 : Greeter.ts的代码如下:

1
2
3
export interface StringValidator{
     isAcceptable( s : string ) : boolean;
}

注意一点 : export修饰了这个接口(实际上,它"export"还可以修饰类,变量,函数),则这个接口可以被别的模块导入使用 例如: CodeValidator.ts

CodeValidator.ts代码如下:

1
2
3
4
5
6
7
8
9
10
11
import {StringValidator} from  "./Greeter"
export const numberRegexp = /^[0-9]+$/;
 
export class CodeValidator implements StringValidator{
     isAcceptable( s : string ) : boolean{
         return   s.length == 5 && numberRegexp.test(s);
     }
}
 
let s : StringValidator =   new  CodeValidator();
console.log(` this  is  : ${s.isAcceptable( "123" )}`);

注意:import {StringValidator} from "./Greeter" 既是从Greeter.ts模块中导入StringValidator接口 , 常量 numberRegexp 也是被export修饰 

查看结果:

wKioL1mf1mXS8lGXAAAhwp0Oo5o510.png-wh_50


我们稍微延伸一下:

修改一个CodeValidator.ts代码如下(把打印信息修改下):

1
2
3
4
5
6
7
8
9
10
11
import {StringValidator} from  "./Greeter"
export const numberRegexp = /^[0-9]+$/;
 
export class CodeValidator implements StringValidator{
     isAcceptable( s : string ) : boolean{
         return   s.length == 5 && numberRegexp.test(s);
     }
}
 
let s : StringValidator =   new  CodeValidator();
console.log(` this  CodeValidator is  : ${s.isAcceptable( "123" )}`);

我在com文件夹外见一个MC.ts

wKioL1mf2beRzcTJAAB4UfPMhjg480.png-wh_50

MC.ts的代码如下:

1
2
3
4
5
6
7
8
9
10
11
import {StringValidator} from  "./com/Greeter"
import {numberRegexp} from  "./com/CodeValidator"
 
export class MC implements StringValidator{
     isAcceptable( s : string ) : boolean{
         return   numberRegexp.test(s);
     }
}
 
let  mc : StringValidator =  new  MC();
console.log(` this  MC func : ${mc.isAcceptable( "123" )}`);

注意:from后面的路径变了

结果:

wKiom1mf2nLDvJ4NAAA3SPTtXAs120.png-wh_50


我们继续扩展 , 我间一个和com文件夹平级的文件夹cn,在cn文件夹中使用com文件夹中的CodeValidator.ts和Greeter.ts的内容或功能

wKioL1mf3HmCs3-yAABbLS_Xo0I449.png-wh_50

SP.ts的代码如下:

1
2
3
4
5
6
7
8
9
10
import {StringValidator} from  "./../com/Greeter"
import {numberRegexp} from  "./../com/CodeValidator"
export class SP implements StringValidator{
     isAcceptable( s : string ) : boolean{
         return   numberRegexp.test(s);
     }
}
 
let  sp : StringValidator =  new  SP();
console.log(` this  MC func : ${sp.isAcceptable( "123" )}`);

结果:

wKiom1mf3RrRlbjCAAA4EXOtTEI680.png-wh_50


可以总结如下:


./    :    在本TS的文件夹中

../   :    返回上一级文件夹

如果还是不懂 , 可以再看看以上的测试



好了,开始使用正儿八经的使用模块 , 需要使用关键字   module

其实module 相当于高级语言的 命名空间 。那么使用module , 只要module不同 , 里面的内容都是独立的 , 这样可以避免命名冲突

还在原来的基础上改: 在Greeter.ts上以上module 如下:

1
2
3
4
5
module com {
     export interface StringValidator {
         isAcceptable(s: string): boolean;
     }
}

可见模块(命名空间)的名称为com

那么导入它也需要发生改变:

CodeValidator.ts如下:::

1
2
3
4
5
6
7
8
9
10
11
///<reference path="Greeter.ts" />
export const numberRegexp = /^[0-9]+$/;
 
export class CodeValidator implements com.StringValidator{
     isAcceptable( s : string ) : boolean{
         return   s.length == 5 && numberRegexp.test(s);
     }
}
 
let s : com.StringValidator =   new  CodeValidator();
console.log(` this  CodeValidator is  : ${s.isAcceptable( "123" )}`);

注意上面的  ///<reference path="Greeter.ts" /> 是引用Greeter.ts模块 , 那么调用此模块中的成员,需要使用模块名 + “.” + 元素名 如 com.StringValidator 即为调用接口


MC.ts 代码如下:

1
2
3
4
5
6
7
8
9
10
11
///<reference path="com/Greeter.ts" />
import {numberRegexp} from  "./com/CodeValidator"
 
export class MC implements com.StringValidator{
     isAcceptable( s : string ) : boolean{
         return   numberRegexp.test(s);
     }
}
 
let  mc : com.StringValidator =  new  MC();
console.log(` this  MC func : ${mc.isAcceptable( "123" )}`);


SP.ts代码如下 :

1
2
3
4
5
6
7
8
9
10
///<reference path="../com/Greeter.ts" />
import {numberRegexp} from  "./../com/CodeValidator"
export class SP implements com.StringValidator{
     isAcceptable( s : string ) : boolean{
         return   numberRegexp.test(s);
     }
}
 
let  sp : com.StringValidator =  new  SP();
console.log(` this  MC func : ${sp.isAcceptable( "123" )}`);

结果:

wKioL1mf5QWDu4PwAAA7Lpzv2cU480.png-wh_50



或许有读者说每次带个com.  挺烦的 , 好了扩展继续(以SP.ts为例)

SP.ts

1
2
3
4
5
6
7
8
9
10
11
///<reference path="../com/Greeter.ts" />
import {numberRegexp} from  "./../com/CodeValidator"
type  StringValidator = com.StringValidator;
export class SP implements StringValidator{
     isAcceptable( s : string ) : boolean{
         return   numberRegexp.test(s);
     }
}
 
let  sp : StringValidator =  new  SP();
console.log(` this  MC func : ${sp.isAcceptable( "123" )}`);


核心  type  StringValidator = com.StringValidator;   将com.StringValidator 命名为 StringValidator  (映射) 。


好了 , 本篇关于模块的博客 , 写完收工!!!!!!!!!!!



















本文转自Aonaufly51CTO博客,原文链接: http://blog.51cto.com/aonaufly/1959368,如需转载请自行联系原作者



相关文章
|
7月前
|
JavaScript
TypeScript中模块的导入与导出技术详解
【4月更文挑战第23天】TypeScript模块化通过`export`和`import`实现代码组织。导出包括变量、函数、类、接口,支持命名导出和默认导出。导入时,命名导出使用花括号指定成员,默认导出直接引用,还可使用`as`重命名。模块机制促进代码复用、解耦,提升可维护性。理解并运用这些技术对构建大型应用至关重要。
|
JavaScript 前端开发
带你读《现代TypeScript高级教程》六、命名空间和模块(1)
带你读《现代TypeScript高级教程》六、命名空间和模块(1)
|
7月前
|
JavaScript 前端开发 编译器
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)
140 0
|
1月前
|
设计模式 JavaScript 安全
TypeScript性能优化及代码质量提升的重要性、方法与策略,包括合理使用类型注解、减少类型断言、优化模块导入导出、遵循编码规范、加强代码注释等
本文深入探讨了TypeScript性能优化及代码质量提升的重要性、方法与策略,包括合理使用类型注解、减少类型断言、优化模块导入导出、遵循编码规范、加强代码注释等,旨在帮助开发者在保证代码质量的同时,实现高效的性能优化,提升用户体验和项目稳定性。
46 6
|
3月前
|
JavaScript
TypeScript 详解之 TypeScript 模块
TypeScript 详解之 TypeScript 模块
|
4月前
|
开发框架 JSON 缓存
基于SqlSugar的开发框架循序渐进介绍(22)-- Vue3+TypeScript的前端工作流模块中实现统一的表单编辑和表单详情查看处理
基于SqlSugar的开发框架循序渐进介绍(22)-- Vue3+TypeScript的前端工作流模块中实现统一的表单编辑和表单详情查看处理
|
5月前
|
JavaScript 编译器 开发者
TypeScript(十二)模块
TypeScript(十二)模块
47 0
|
6月前
|
JavaScript 编译器 开发者
32.【TypeScript 教程】模块
32.【TypeScript 教程】模块
40 0
|
JavaScript 前端开发
开心档之TypeScript 模块
开心档之TypeScript 模块
42 0
|
7月前
|
JavaScript IDE 编译器
TypeScript中模块路径解析与配置:深入剖析与最佳实践
【4月更文挑战第23天】本文深入探讨了TypeScript中模块路径解析的原理与配置优化,包括相对路径、Node.js模块解析和路径别名。通过配置`baseUrl`、`paths`、`rootDirs`以及避免裸模块名,可以提升开发效率和代码质量。建议使用路径别名增强代码可读性,保持路径结构一致性,并利用IDE插件辅助开发。正确配置能有效降低维护成本,构建高效可维护的代码库。