基础类型
basic-types 介绍了默认支持的数据类型: string,boolean,array,object等
高级类型
- 交叉类型(Intersection Types)
type a & type b
,将多个类型合并为一个类型。新的类型要满足所有类型的属性
interface Loggable {
log(): void;
}
interface Person {
firstName: string;
lastName: string
}
// t 需要同时满足Loggable 和Person的特性
let t : Loggable & Person;
变量t
必须要包含 firstName,lastName,log()
- 联合类型(Union Types)
type a | type b
,新类型满足其中一个类型即可
function padLeft(value: string, padding: string | number) {
// ...
}
function type: number | string;
- 类型别名(Type Aliases)
关键字type
为类型申明一个别名:type alisa = type-definition
type Name = string
type NameResolver = () => string
type NameOrResolver = Name | NameResolver
function getName(m : NameOrResolver) : Name {}
- 字面量类型(Literal Types)
字符串字面量类型和联合类型一起使用,可以限定变量的取值范围
type Easing = "ease-in" | "ease-out" | "ease-in-out";
function animate(easing: Easing) {
}
animate('easy-in') // OK
animate('uneasy') // error
- 索引类型(Index Types)
一般用于对象具有动态属性的场景
keyof T
索引类型查询操作符,返回类型T包含的属性名的集合
interface Person {
name: string;
age: number;
}
let personProps: keyof Person // 'name' | 'age'
T[K]
索引访问操作符,
function getProperty<T, K extends keyof T>(o: T, name: K): T[K] {
return o[name]; // o[name] is of type T[K]
}
let name: string = getProperty(person, 'name');
let age: number = getProperty(person, 'age');
let unknown = getProperty(person, 'unknown'); // error, 'unknown' is not in 'name' | 'age'
网友评论