背景:
2012年10月微软发布公开版的ts
2013年,微软发布正式版的ts
作者:安德斯·海尔斯伯格,C#的首席架构师。
特点:扩展了js语法,是js的一个超集,提供了类型系统和es6+的支持。
基础类型篇
布尔值
let isFlag: Boolean = true;
数字
let num: number = 1;
undefined和null
默认情况下null和undefined是所有类型的子类型。可以把null和undefined赋值给numer类型的变量
let und: undefined = undefined;
let nl: null = null;
数组
let list1: number[] = [1,2,3];
//数组泛型
let list2: Array<number> = [1,2,3];
元组 Tuple
表示一个已知元素数量和类型的数组,各元素的类型不必相同。
let list: [string, number];
list = ['1', 1]; // ok
list = [false, 'str']; // error
枚举 enum
对js标准数据类型的补充,枚举数组默认从0开始依次递增。
enum Fruit {
apple,
grape,
watermelon
}
let fruit: Fruit = Fruit.apple; // 0
let fruitName: string = Fruit[0]; // 'apple'
//可以手动指定成员的数值
enum Fruit {
apple = 1,
grape = 2,
watermelon = 10
}
let fruit: Fruit = Fruit.grape; //2
any
let param: any = 1;
param = '22'; // ok
let list: any[] = [1, '111', null];
void
表示函数没有返回值
function fn(): void {
return null // ok
return undefined // ok
return '123' // error
}
let empty: void = undefined
object
表示非原始类型,除number, string, boolean之外的类型。
function fn(obj: object):object {
console.log(obj);
return {}
}
fn(‘123’) //error
fn(new String(‘123’)) // ok
联合类型
取值可以为多种类型中的一种;用"|"来表示。
function fn(x:number | string): string {
return x.toString();
}
类型断言
好比其他语言里的类型转换,但不进行特殊的数据检查和结构。可以手动指定一个值的类型
function getLength(x: number | string) {
if(x.length) { // error
return x.length
} else {
return x.toString().length
}
}
//类型断言写法一:<类型>值
function getLength(x: number | string) {
if((<string>x).length) {
return (<string>x).length
} else {
return x.toString().length
}
}
//类型断言写法二: 值 as 类型 tsx中只能用这种方式
function getLength(x: number | string) {
if((x as string).length) {
return (x as string).length
} else {
return x.toString().length
}
}
类型推断
没有明确的指定类型时推测出一个类型。
有2种情况:1.定义变量时赋值了,推断为对应的类型。 2.定义变量时没有赋值,推断为any类型
// 定义变量时赋值了,推断为对应的类型
let a = 123; // number类型
a = ‘a’; // error
// 定义变量时没有赋值,推断为any类型
let b; // any类型
b = 123; //ok
b = ‘abc’; //ok
接口 Interfaces
使用接口定义对象的类型。接口是对象的状态(属性)和行为(方法)的抽象(描述)
接口定义
interface IEmployees {
id: number
name: string
age: number
resume: string
}
可选属性
interface IEmployees {
id: number
name: string
age: number
resume?: string
}
只读属性
interface IEmployees {
readonly id: number
name: string
age: number
resume: string
}
函数类型
除了普通类型外,接口也能描述函数类型。需要给接口定义一个调用签名。
interface Func {
(x: string, y: string): boolean
}
const myFunc: Func = function(x: string, y: string): boolean {
return x === y
}
类类型
明确强制一个’类’去符合某种契约。
interface Alarm {
alert(): any
}
class Features implements Alarm {
alert() {
alter(1)
}
}
类实现多个接口
interface Alarm {
alert(): any
}
interface Warn {
warn(): void
}
class Features implements Alarm, Warn {
alert() {
alter(1)
}
warn() {
console.log(1)
}
}
接口继承接口
interface Alarm {
alert(): any
}
interface Warn {
warn(): void
}
interface AlarmAndWarn extends Alarm, Warn {
push(): any[]
}