TypeScrip2(对象类型和数组类型)

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}]

 下一章:TypeScrip3(函数扩展 | 类型断言 | 联合类型 | 交叉类型)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值