基本数据类型
布尔值:boolean
数值:number
字符串:string
特别的类型:void / undefined / null
undefined
和 null
是所有类型的子类型
任意值(any)
表示允许赋值为任意类型
any
类型的变量可以赋值任意类型的值any
类型的变量可以使用任意属性和方法定义不指定类型的变量,且定义时不赋值,相当于类型的
any
类型推论
TypeScript 会在没有明确的指定类型的时候推测出一个类型
定义变量时赋值了,推断为对应的类型
定义变量时没有赋值,推断为
any
类型
联合类型(Union Types)
表示取值可以为多种类型中的一种
let c1: number | string = 3;
c1 = "123";
类型断言(Type Assertion)
可以用来手动指定一个值的类型
语法
<类型>值
值 as 类型
注意:tsx中只能用这种方式
接口(Interfaces)
在 TypeScript 中,我们使用接口来定义对象的类型
接口:在面向对象的语言中,是 n 个行为的抽象/描述,但没有实现,由类去实现
在 TS 中,接口也可以包含状态的描述
只读属性: reasonly
可选属性:?
样例:
interface IPerson {
readonly id: number;
name: string;
age: number;
sex?: string;
}
const p: IPerson={
id: 1,
name: 'demo',
age: 12,
sex: '女'
}
const p2: IPerson = {
id: 2,
name: 'demo2',
age: 13
}
数组类型
方式一
number[]
方式二(泛型)
Array
const names: string[] = ['a', 'b', 'c']
const names: Array = ['a', 'b', 'c']
const arr: any[] = ['b', 1, true]
元组
可包含多种类型元素的数组
let person: [string, number] = ['tom', 12]
当添加越界的元素时,它的类型会被限制为元组中每个类型的联合类型(不能为联合类型之外的其他类型)
函数的类型
函数声明
function fn1(x: string, y: number): number {
return 2;
}
可选参数
const a= function fn1(x: string, y?: number): number {
return 2;
}
console.log(a);
形参默认值
const a = function fn1(x: string, y: number = 3): number {
retu
剩余参数
const a = function fn1(x: string, ...args: any[]) {
return args;
}
console.log(a('a', 1, "2", "jdsa", true));
声明文件
当使用第三方库时,我们需要引用它的声明文件,才能获得对应的代码补全、接口提示等功能
声明语句
如果需要 TypeScript
对新的语法进行检查,需要加载对应的类型说明代码
declare var jQuery: (selector: string) => any;
声明文件
把声明语句放在一个单独的文件(jQuery.d.ts)中,ts
会自动解析到项目中所有声明文件
下载声明文件
npm install @types/jquery --save-dev
枚举(Enum)
用于取值被限定在一定范围内的场景,比如一周只能有七天,颜色限定为红绿蓝等。
枚举使用 enum 关键字来定义
类(class)
访问修饰符
public:任何地方都可见,默认是 public
private:只在类内部可见
protected:类内部或子类中可见
readonly
只能通过构造方法赋值一次
抽象类(abstract)
可以包含抽象方法
不可以有实例
抽象类与实现类的区别
抽象方法:有abstract / 没有方法体 / 不能创建实例
实现方法:没有abstract / 有方法体 / 可以创建实例
接口与类
对 对象的形状(shape) 进行描述
对类的一部分行为进行抽象
父接口可以有多个,但父类只能有一个:多实现,单继承
一个类可以实现一个接口
一个类可以继承于另一个类
interface Light{
lightOn(): void;
lightOff(): void;
}
class Car implements Light {
lightOn(){
console.log('Car light on');
}
lightOff(){
console.log('Car light off');
}
}
泛型
泛型是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性
function createArray(length: number, value: T): Array {
let result: Array = [];
for (let i = 0; i < length; i++) {
result[i] = value;
}
return result;
}
createArray(3, 'x')
使用 react-cli 创建 react-ts 项目
create-react-app react-ts --typescript