携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第17天,点击查看活动详情
本文中将会提到的类型:
- 联合类型
- 对象的类型: 接口 interface
- 数组类型
在前文中(1、TypeScript 的特性与变量声明)我们简单了解了 Typescript 一些基本数据类型,在实际的应用场景中数据的应用会更加灵活。
常用数据类型
- 基础类型
- number
- boolean
- string
- null、undefined ( null undefined 是所有类型的子类型)
- symbol (ES6)
- enum // 枚举
- void
- any // 任意类型
- never
- 对象类型
- 数组类型
- 函数类型
一、联合类型
当一个变量数据类型有多种可能的时候,可以设置联合类型,最终取值为多种类型中的一种
let luckyNumber: string | number;
luckyNumber = 'eight';
luckyNumber = 8;
二、对象的类型( 接口 )
接口( Interfaces )是面向对象的概念。它用来进一步定义对象内的各种属性,所声明的都是抽象的。
1. 基础语法:
2. 使用方法:
比如我们来定义一个水果Fruit接口,再通过这个水果接口声明一个banana香蕉对象,通过banana调用里面的属性:
interface Fruit {
name: string;
price: number;
remark: string;
}
let banana: Fruit = {
name: 'banana',
price: 10,
remark: '十元三斤'
};
console.log('品种:',banana.name)
console.log('价格:',banana.price)
console.log('备注:',banana.remark)
运行结果:
注:赋值的时候,变量必须和接口保持一致。
3. 接口中变量的属性
在属性方面,可以分为以下几类:
-
确定属性:在上个例子中声明的变量属性都是确定属性
-
可选属性:如果有变量不是必须声明,可以配置为可选属性
-
任意属性:
- 一个接口中只能定义一个任意属性。
- 接口中定义了任意属性后,确定属性和可选属性的类型都必须是它的类型的子集
-
只读属性:只在创建的时候被赋值,后面无法进行修改
interface Fruit {
readonly id: number;
name: string;
price: number;
remark?: string; // 可选属性
[propName: string]: any; // 任意属性
}
let banana: Fruit = {
id: 1024
name: 'banana',
price: 10,
color: 'yellow'
};
三、数组类型
数组在声明的时候,元素的数据类型必须统一(因为已经声明了数据的类型)
let num: number[] = [1, 2, 3, 4, 5]
let num2: number[] = new Array(5)
let num3: number[][] = [[1, 2, 3], [4, 5, 6]] // 二维数组
当然,除非是任意类型 any ,这种写法更加自由,不再限制数据类型:
let fruit: any[] = ['apple', 12, { type: '红富士' }]
另外一种方式是使用数组泛型进行数组的声明:
泛型:在定义函数、接口或类时,不预先指定具体的类型,而是使用的时候来指定类型
形式:Array<elemType>
let num: Array<number> = [1, 2, 3];