TypeScript 下
AI-摘要
Tianli GPT
AI初始化中...
介绍自己
生成本文简介
推荐相关文章
前往主页
前往tianli博客
简介
TypeScript是微软开发的一个开源的编程语言,通过在JavaScript的基础上添加静态类型定义构建而成。TypeScript通过TypeScript编译器或Babel转译为JavaScript代码,可运行在任何浏览器,任何操作系统。
参考资料
tsconfig.json 文件
tsc --init
命令可生成 tsconfig.json 文件
总览
- 具体使用可见查官网配置简介
1 | { |
常用配置
include
- 编译默认是编译当前目录下所有的ts文件,也可用 include 指定需要编译的文件
- 如下所示,指定只编译 index.ts index3.ts 两个文件
1 | { |
exclude
- 和 include 相反,指定编译需要排除的文件
- 如下所示即表示,编译时排除 ./src/index3.ts 这个文件
1 | { |
target
- 指定编译 js 的版本例如 es5 es6 es2016
- 一般采用 es6 的较多,如果为了兼容低版本的浏览器可以指定 es5 或者更低
- 该属性时写在 compilerOptions 内的
1 | { |
allowsJS
- 是否允许编译 js 文件
- 如果项目中有 js 和 ts 就需要设置该属性开启一起编译(不过一个项目最好还是固定一种)
1 | { |
removeComments
- 是否在编译过程中删除文件中的注释
rootDir
- 编译文件的目录
outDir
- 输出的目录
- 打包后的目录 一般默认为 ./dist
sourceMap
- 代码源文件
strict
- 严格模式
- 布尔值,开启后就不能滥用类型
module
- 默认common.js 可选es6模式 amd umd 等
- 看上去定义定义方法 导包的关键字不一样了
namespace
简介
- 在我们的工作中无法避免 全局变量 造成的污染,在 JS 中我们一般是通过模块的方式进行导出进行解决
- 全局变量污染: 在两个不同的文件中定义了相同变量名的全局变量会造成重复,通过 export进行导出,当成一个模块 的方式进行解决
1 | export let num: number = 100 |
- 在 TypeScript 中为我们提供了 namespace 避免这个问题的出现
- 通过
namespace
关键字定义,通过export
暴露 - 内部模块,主要用于组织代码,避免命名冲突。
- 命名空间内的类默认私有
基本使用
- namespace 定义,export 导出
- 使用时用 命名空间名.导出的对象或者方法
1 | // 命名空间 |
嵌套命名空间
- 里面加一层命名空间,命名空间名前面加上 export 关键字
- 支持多层或者多个嵌套
- 使用时注意嵌套关系
1 | // 嵌套命名空间 |
抽离命令空间
1 | // 抽离命名空间 |
1 | import {abs} from "./abs" |
简化命名空间
- 在上面的嵌套命名空间中,使用一个里层的命名空间往往需要带上前面几层例如 basePro.base.say(basePro.base.str)
- 我们可以通过 import 的方式进行导入简化
1 | // 嵌套命名空间 |
合并命名空间
- 重名的命名空间会自动合并
1 | namespace User { |
三斜线指令
- 三斜线指令是包含单个 XML 标签的单行注释。 注释的内容会做为编译器指令使用
- 三斜线指令仅可放在包含它的文件的最顶端。 一个三斜线指令的前面只能出现单行或多行注释,这包括其它的三斜线指令。 如果它们出现在一个语句或声明之后,那么它们会被当做普通的单行注释,并且不具有特殊的涵义
/// <reference path="..." />
指令是三斜线指令中最常见的一种,它用于声明文件间的依赖- 三斜线引用告诉编译器在编译过程中要引入的额外的文件,你也可以把它理解能
import
,它可以告诉编译器在编译过程中要引入的额外的文件
1 | namespace A { |
1 | namespace A { |
1 | ///<reference path="./index2.ts" /> |
- 声明文件引入
yarn add @types/node -D
/// <reference types="node" />
就会找到 @types/node/index.d.ts
1 | /// <reference types="node" /> |
声明文件 d.ts
- 声明文件 declare 当使用第三方库时,我们需要引用它的声明文件,才能获得对应的代码补全、接口提示等功能
1 | declare var 声明全局变量 |
- 假设我们有两个依赖 axios express
1 | yarn add axios express -S |
- 如果导入报错提示安装 @type/xxxxx 那么直接进行安装依赖即可(原因的一些老的依赖没有声明文件 index.d.ts 基本上通过 @type 进行安装都行(前提是存在),微软在 npm 上维护了大量的 )
Mixins混入
对象混入
- 可以使用 ES6 的 Object.assign 合并多个对象
1 | // Object.assign 对象混入 |
类混入
1 | // 类的混入 |
Decorator
装饰器简介
- 装饰器是一种特殊类型的声明,它能够被附加到 类声明 方法 访问符 属性 或 参数上。
- Decorator 装饰器是一项实验性特性,在未来的版本中可能会发生改变(我个人的理解就是后端的注解)
- 它们不仅增加了代码的可读性,清晰地表达了意图,而且提供一种方便的手段,增加或修改类的功能
- 若要启用实验性的装饰器特性,你必须在命令行或
tsconfig.json
里启用编译器选项
1 | { |
无参类装饰器
- 定义类装饰器使用
ClassDecorator
记得要区分作用域,类装饰器就在类上用 target: Function
表示使用该装饰器的对象- 使用时通过
@装饰器名
- 注意使用 any 临时断言
1 | // ClassDecorator 作用在类上装饰器 |
带参类装饰器
- 装饰器工厂,其实也就是一个高阶函数 外层的函数接受值 里层的函数最终接受类的构造函数
- 同样使用
ClassDecorator
来表示类装饰器 - 装饰器参数可定义多个,这里只定义了一个 type,约束为 string
- 在类上使用该装饰器时,需要传一个 string 类型的值给装饰器
- 装饰器的参数和内部的 sum 函数的参数是独立的,内部的 sum 函数是在使用了该装饰器的类对象调用时的传参
1 | // 带参数的类装饰器,可以定义多个参数,目前装饰器只定义了一个 type |
组合式装饰器
- 说人话就是可以使用多个装饰器
- 没什么特殊的,就是在使用的地方引用多个已定义的装饰器就行
- 引用的时候可以写在一行或者换行书写
1 | // 组合装饰器,先定义两个装饰器 |
方法装饰器
- 该装饰器作用在方法上,通过关键字
MethodDecorator
- 返回的信息也是三部分,最后的 value writable enumerable configurable 是一些附加信息
方法的形参装饰器
- 作用在方法的形参上,通过关键字
ParameterDecorator
定义
1 | // 作用在方法的形参上 |
属性装饰器
- 该装饰器作用在属性上,通过关键字
PropertyDecorator
定义 - 控制台会输出三个属性分别是 target 参数名 还有一个 undefined
1 | const prop1: PropertyDecorator = (...args) => { |
评论
匿名评论隐私政策