TS 基本类型
示例代码:typescript-demos
为什么要用 TypeScript?
好处:
- 规避大量低级错误,避免时间浪费(省时)
- 减少多人协作项目的成本,大型项目友好(省心)
- 良好代码提示,不用反复文件跳转或者翻文档(省力)
坏处:
- 与其它框架结合会有坑
- 配置学习成本高
- 要学习额外的类型系统
TypeScript 开发环境设置
# 全局安装(可以使用 `tsc` 命令)
npm install -g typescirpt
# 初始化目录
npm init
# 初始化ts环境(会多一个 `tsconfig.json` 文件,即项目的ts配置文件)
tsc --init
关于
tsconfig.json
更多说明,可以参考自动生成的tsconfig.json
注释或官网文档1。
在 package.json
加上两个 script:
build
编译build:w
监听并编译
"scripts": {
"build": "tsc",
"build:w": "tsc -w"
}
基础类型
原始类型
其它常见类型
boolean 布尔值
const isSpinning: boolean = false;
number 数字
const size: number = 6;
注:除了十进制,还可以是十六进制、二进制、八进制字面量。
string 字符串
const customer: string = 'Tonny';
注:除了单双引字符串,还可以是模板字符串(被反引号包围)。
void 空值
void
表示没有任何类型- 当一个函数没有返回值时,它的返回类型就是
void
- 声明一个
void
类型的变量没什么用,因为它只能被赋予undefined
和null
function sayHi(): void {
alert('Hi');
}
null & undefined
- 默认情况下,
null
和undefined
是所有类型的子类型,即可以把它们赋值给以上类型 undefined
能赋值给void
- 只有
--strictNullChecks
设置为false
时null
才能赋值给void
let u: undefined = undefined;
let n: null = null;
let v1: void = undefined; // OK
// let v2: void = null; // 注意:strictNullChecks=false时才可以这样赋值
tsconfig.json
开启 strictNullChecks
检查:
{
"compileOnSave": false,
"compilerOptions": {
"strictNullChecks": true,
"skipLibCheck": true,
}
}
symbol 唯一标识
使用 Symbol
时,必须添加 es6
的编译辅助库:
{
"lib": ["ES6", "DOM"],
}
该类型通过 Symbol
构造函数创建:
const s1 = Symbol('s1');
const s2 = Symbol('s2');
Symbol 的值时唯一不变的:
Symbol('s1') = Symbol('s1'); // false
BigInt 大数整数
使用 BigInt
必须添加 ESNext
编译辅助库:
"lib": ["es6", "dom", "ESNext"],
Any 任何值
- 可以为还不清楚类型的变量指定该类型
any
- 多人协作协作项目大忌,很可能把
TypeScript
变成AnyScript
,所以非不得情况不建议使用
let a: any;
unknown 未知值
- ts 3.0 引入的新类型,
any
类型对应的安全类型 - 与
any
对比,unknown
会更严格:当unknown
类型被确定是某个类型之前,它不能被进行任何操作,如实例化、getter、函数执行等 - 缩小其类型范围可以执行
unknown
,如用 instanceof 判断是否日期、数组等具体类型
let a: any;
a[0] = 1; // OK
let un: unknown;
// un[0] = 1; // Error:未确定类型之前不能进行操作
if (un instanceof Array) { // 缩小范围类型,让unknow可以执行操作
un[0] = 1; // OK
}