如何进行类型检查
时候用 :
let name:string = '13'
let nums: number[] = [1] // 每一项为 number 的数组
let nums: Array<number> = [1] // 每一项为 number 的数组
function sum(a: number, b:number): number{
return a + b
}
f2 重命名,因为有类型检查,所以可以一次性重命名。
f12 调转到定义。
ts 有智能类型推到,有时候我们没有写类型的时候。
ts 支持哪些基本类型
-
number: 小写,数字
-
boolean: 小写,布尔
-
string: 小写,字符串
-
number[] 或者 Array: 数组,number 只是个例子,可以改成其他类型,表示某种类型的数组
-
object: 对象
-
null 和 undefined: 是所有其他类型的子类型,可以赋值给其他类型。为了更加严格的空类型价差,通过在配置文件中添加,
strictNullChecks: true
, 这样它们就只能赋值给自生了。 -
联合类型:
let name: string | undefined = undefined
。相当于或。可以使用 typeof 判断类型
let name: string | undefined = undefined
if(typeof name === "string") { // 类型保护. 触发类型保护的方式有很多,typeof 算一种
}
- void 类型: 通常用来表示函数没有任何返回值
- never 类型: 通常用于约束函数的返回值,表示函数永远不能能结束
function throwError(msg: string):never {
throw new Error(msg)
console.log('xxx')
}
function whileTest() {
while(true) {
}
}
- 字面量类型: 表示使用一个值进行约束
let a:"A"
表示 a 只能为 ”A“,不能改变
let a:"A"
let gender: "boy" | "girl"
let arr: [] // 永远只能是一个空数组
let user: { // user 只能是这种类型, 里面会包含 name 和 age
name: string,
age: number
}
- 元祖类型 (Tuple):一个固定长度的数组,并且数组中每一项的类型确定
let tu: [string, number] // 只能有两项
- any 类型:可以绕过类型检查,可以赋值给任意类型
类型别名
对已知的一些类型定义名称
type Gender = "nan" | "nu"
type user = {
name: string,
age: number,
gender: Gender
}
let u: user
function getUsers(g: Gender):User[] {
return []
}
函数相关的约束
// 函数重载
// 约束了之后,只会有这两种情况
function combine(a:number, b:number):number
function combine(a:string, b:string):string
function combine(a: number | string, b:number | string): number | string {
if(typeof a === "number" && typeof b === "number") {
return a * b
}
if(typeof a === "string" && typeof b === "string") {
return a + b
}
}
// 可选参数。加一个 ? 表示可加这个参数可不加这个参数。只能写在参数末尾
function sum(a:number, b:number, c?:number){}
// 默认参数
function sum(a:number, b:number, c:number = 0){}