// 隐式类型
let n = 20
// n = 'str' n 隐式具有number类型
// 联合类型
type greet = "hello" | "hi" | "good morning"
let g:greet = "good morning"
// any和unkwonw
let a: any = 20 // 任意类型,此时编译器将跳过该变量的语法检查
let u: unknown = "unknown" // 未知类型
// any 可以赋值给确定的类型,比如上面的number
n = a
// n = u // 但是 unknown 不行,未知类型的值不能赋给确定类型的值
// 除非先判断类型
if (typeof u == 'number')
n = u
// 或者类型断言
n = u as number
n = <number>u
// 返回类型 void never
function f1(): void {
console.log('haha')
}
function f2(): never {
throw new Error('抛出异常') // 永远不会返回结果
}
// {} 可以用来指定对象中需要包含哪些属性
let person: {
name: string,
alias?: string,
gender: 0 | 1,
}
person = {
name: "Edison", // 不能缺少当前属性
// age: 26 // 不能添加其他属性
gender: 1
}
// 添加任意属性
let obj: {
[attr_name: string]: any
}
// 函数
let f: (a: number, b: number) => number
f = function(x: number, y: number) {
return x + y
}
// 数组
let arr: number[]
arr = [1, 2]
let arr2: Array<number | string>
arr2 = [1,'hi']
type arr3 = Array<number | string>
// 元组 - 固定长度的数组
let tuple: [number, string]
tuple = [10, 'abc']
// enum枚举 - 列举所有可能的值
enum Color {
Green,
Red,
Black,
Purple,
}
let backgroundColor = Color.Red
// &操作符 - 同时满足多重类型要求
class Animal {
age: number = 0;
}
// 男人必须满足动物和性别要求
let man: Animal & { gender: 'male' }
man = {
age: 26,
gender: 'male',
}
// type 关键字 创建类型别名
type smart_integer = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
let xzs: smart_integer = 2
网友评论