1.对象的类型
在typescript中,我们定义对象的方式要用关键字interface(接口),使用interface来定义一种约束,让数据的结构满足约束的格式。定义方式如下:
1.使用接口约束的时候不能多一个属性也不能少一个属性,必须与接口保持一致
interface Person {
b:string,
a:string
}
const person:Person = { //报错: 因为我们在person定义了a,b 但是对象里面缺少b属性
a:"213"
}
const person1:Person = { //ok
a:"213",
b:'123'
}
2.重名interface 可以合并
interface A{name:string}
interface A{age:number}
var x:A={
name:'xx',
age:20
}
3.interface 可以继承
interface A{
name:string
}
interface B extends A{
age:number
}
let obj:B = {
age:18,
name:"string"
}
2.可选属性 使用?操作符
可选属性的含义是该属性可以不存在,所以说这样写也是没问题的
interface Person {
b?:string,
a:string
}
const person:Person = {
a:"213"
}
3.任意属性 [propName: string]
需要注意的是,一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集:
//在这个例子当中我们看到接口中并没有定义C但是并没有报错
//因为我们定义了[propName: string]: any;允许添加新的任意属性
interface Person {
b?:string,
a:string,
[propName: string]: any;
}
const person:Person = {
a:"213",
c:"123"
}
4.只读属性 readonly
readonly 只读属性是不允许被赋值的只能读取
interface Person {
b?: string,
readonly a: string,
[propName: string]: any;
}
const person: Person = {
a: "213",
c: "123"
}
person.a = 123 //报错:因为a是只读的不允许重新赋值
5.添加函数
interface Person {
b?: string,
readonly a: string,
[propName: string]: any;
cb():void
}
const person: Person = {
a: "213",
c: "123",
cb:()=>{
console.log(123)
}
}
6.数组类型
1.类型[ ]
let arr:number[] = [123] //类型加中括号
let arr:number[] = [1,2,3,'1'] //报错:定义了数字类型出现字符串是不允许的
let arr:number[] = [1,2,3,]
arr.unshift('1') //报错:操作方法添加其他类型也是不允许的
//正确的:
var arr: number[] = [1, 2, 3]; //数字类型的数组
var arr2: string[] = ["1", "2"]; //字符串类型的数组
var arr3: any[] = [1, "2", true]; //任意类型的数组
2.数组泛型
规则 Array<类型>
let arr:Array<number> = [1,2,3,4,5]
3.用接口表示数组
一般用来描述类数组
interface NumberArray {
[index: number]: number;
}
let fibonacci: NumberArray = [1, 1, 2, 3, 5];
//表示:只要索引的类型是数字时,那么值的类型必须是数字。
4.多维数组
let data:number[][] = [[1,2], [3,4]];
5.arguments类数组
function Arr(...args:any): void {
console.log(arguments)
//错误的arguments 是类数组不能这样定义
let arr:number[] = arguments
}
Arr(111, 222, 333)
function Arr(...args:any): void {
console.log(arguments)
//ts内置对象IArguments 定义
let arr:IArguments = arguments
}
Arr(111, 222, 333)
//其中 IArguments 是 TypeScript 中定义好了的类型,它实际上就是:
interface IArguments {
[index: number]: any;
length: number;
callee: Function;
}
6.any 在数组中的应用
一个常见的例子数组中可以存在任意类型
let list: any[] = ['test', 1, [],{a:1}]