TypeScript 类型(type)¶
TypeScript语言既然命名中有 Type
,也就表明这项语言注重于类型检测: 和 静态类型检测
语言(在不运行代码情况下检测代码中的错误)一样,TypeScript在执行前检查程序是否有错误,并根据值的类型进行检查。
建议采用明确的变量类型声明,以便编译器能够自动找出明显的类型错误
对象¶
使用
{}
创建对象:
let a: object = {
b: 'x'
}
结构中声明变量类型:
let c: {
firstName: string
lastName: string
} = {
firstName: 'john',
lastName: 'barrowman'
}
和类相同:
class Person {
constructor(
public firstName: string,
public lastName: string
)
}{}
c = new Person('matt', 'smith')
类型别名(Type Aliases)¶
使用类型别名(Type Aliases, 建议命名采用首字母大写)可以帮助我们定义更容易理解的结构:
type Age = number
type Person = {
name: string
age: Age
}
let age: Age = 55
let driver: Person = {
name: 'Jame'
age: age
}
并集(union)类型和交集(intersection)类型¶
TypeScript提供了特殊的类型运算符来处理类型的并集和交集:
并集使用
|
交集使用
&
type Cat = {
name: string,
purrs: boolean
}
type Dog = {
name: tring,
barks: boolean,
wags: boolean
}
type CatOrDogOrBoth = Cat | Dog
type CatAndDog = Cat & Dog
//Cat
let a: CatOrDogOrBoth = {
name: 'Bonkers',
purrs: true
}
// Dog
a = {
name: 'Domino',
barks: true,
wags: true
}
// 两者兼具
a = {
name: 'Donkers',
barks: true,
purrs: true,
wags: true
}
数组(array)¶
数组
[]
是特殊类型对象,支持拼接,推入,搜索和切片一般情况下,数组中类型应该同质: 要么存储数字要么存储字符串,这样如果有不同类型的数据推入,TypeScript可以提示错误,方便程序排障
let a = [1, 2, 3]
var b = ['a', 'b']
let c: string[] = ['a']
let d = [1, 'a']
const e = [2, 'b']
let f = ['read']
f.push('blue') // 推入数据必须是同类型的,例如如果 f.push(true) 就会报错
let g = [] //这里没有声明类型,TypeScript会假设为 any类型 ,这样推入任何类型都可以通过,但是不利于检测错误
g.push(1)
g.push('red')
let h: number[] = [] //这里设置了数组f是数字类型
h.push(1) //只能推入数字,不能推入字符串,也就是 h.push('read') 会报错
元组(tuple)¶
元组是数组的子类型,是定义数组的一种特殊方法:
元组长度固定
元组的各个索引位上的值具有固定的已知类型
声明元组的时候必须显式注解类型
let a: [number] = [1]
//[名,姓,出生年月]
let b: [string, string, number] = ['malcolm', 'gladwell', 1963]
元组支持可选的元素,在对象的类型中 ?
表示可选:
let transFares: [number, number?][] = [
[3.75],
[8.25, 7.70],
[10.50]
]
//等价于
let moreTransFares: ([number] | [number, number])[] = [
// ...
]
枚举(enum)¶
enum Language {
English,
Spanish,
Russian
}
// 枚举中的值使用点号或方括号表示法访问,就像访问常规对象中的值:
let myFirstLanguage = Language.Russian
let mySecondLanguage = Language['English']
enum Language {
English = 0,
Spanish =1
}
//枚举的值可以是字符串,或者混用字符串和数字
enum Color {
Red = '#c10000',
Blue = '#007ac1',
Pink = 0xc10050,
White = 255
}
参考¶
O’REILLY 《TypeScript编程》