这是我参与「第四届青训营 」笔记创作活动的的第11天
语言层面
- 动态类型:变量定义时无类型声明。
- 变量的类型在运行的时候确定。
- 变量的类型在运行可以修改。
- 静态类型:变量定义时有类型声明。
- 变量的类型在编译的时候确定
- 变量的类型在运行时不能修改,这样编译器就可以确定运行时需要的内存总量。
- 弱类型语言:数据类型可以被忽略。
- 强类型语言:强制数据类型定义。一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。
TS基础内容
TypeScript静态弱类型语言
- 可读性增强:基于语法解析TSDoc;ide增强:类型提示、代码补全。
- 可维护性增强:在编译简短暴露大部分错误
- 语法拼写错误
- 类型匹配错误
- 多人合作的大型项目中,获得更好的稳定性和开发效率
TS基础语法
详细语法请参照官方文档:
基础类型 · TypeScript中文网 · TypeScript——JavaScript的超集 (tslang.cn)
类型
- null 和 undefined:所有类型的子类型
- boolean:布尔值
- number:数字
- string:字符串
- 枚举类型:支持枚举值到枚举名的正、反映射
- any
- 数组
- T[]
- Array
- 元组
- [string, number…]
- void
- never
- object
函数重载
泛型
type IGetRepeatArr = (target: any) => any[];
// 不预先指定具体的类型,而是在使用的时候再指定类型
type IGetRepeatArr = <T>(target: T) => T[];
// interface
interface IX<T, U> {
key: T;
val: U;
}
// class
class IMan<T> {
instance: T;
}
// alias
type ITypeArr<T> = Array<T>
泛型约束
T = ...
T extends typeof ...
类型别名&类型断言
-
varaibleName as T
-
varaibleName
高级类型
联合、交叉类型
- 联合类型:IA | IB;联合类型表示一个值可以是几种类型之一。
- 交叉类型:IA & IB;多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特征。
继承接口
// 获得一个新的类型,让某些类型可选 => Partial
export interface DefaultOptons {
uuid: string | undefined,
requestUrl: string | undefined,
sdkVersion: string | number,
extra: Record<string, any> | undefined,
}
export interface Options extends Partial<DefaultOptons> {
// requestUrl必选,其他可选
requestUrl: string
}
工程实践
Webpack
- 配置webpack loader相关配置
- 配置tsconfig.js文件
- 运行webpack启动/打包
- loader处理ts文件时,会进行编译与类型检查
Node
- 安装配置node环境
- 配置tsconfig.js文件
- 使用npm安装tsc
- 使用tsc运行编译得到js文件
Rollup
- 创建基础目录结构
- 初始化项目
- pnpm init
- pnpm install …
- 使用tsc初始化tsconfig.js,配置后可正常使用
- rollup -c打包项目