本篇学习记录对象,接口,元组, 字面量类型,枚举,any类型
对象
JS的对象是由key,value组成的,而在ts中对象的类型就是描述对象的结构
声明对象:
// 声明方法一:
let person :{name:string;age:number;sayHi(name:string):void;great():void } = {
name:'章三',
age:18,
sayHi(name){},
great:()=>{}
}
// 声明方法二:
type customObject = {
name:string
age:number
sayHi(name:string):void
great():void
}
let person2:customObject ={
name:'章三',
age:18,
sayHi(name){},
great:()=>{}
}
console.log(person2);
可选属性:
// 可选属性
type customObject1 = {
name:string
age?:number
sayHi(name:string):void
great():void
}
let person3:customObject1 ={
name:'章三',
sayHi(name){},
great:()=>{}
}
console.log(person3);
接口:interface
当一个对象被多次使用的时候,就使用接口(interface)来定义对象类型,达到复用的目的
// 接口 interface
interface customObject2 {
name:string
age?:number
sayHi(name:string):void
great():void
}
let person4:customObject2 ={
name:'章三',
sayHi(name){},
great:()=>{}
}
console.log(person4);
接口(interface)与类型别名(type)的区别
相同点:都可以给对象指定类型
不同点:接口(interface)只能给对象制定类型,类型别名(type)可以给任何类型指定别名
接口的继承(extends)
如果两个或者多个接口里面有公共的属性,就可以把这些属性抽离出来,作为一个公共的接口
// 接口继承
interface pageIndex{
page:number
size:number
}
// interface codeIndex{
// page:number
// size:number
// code:number
// message:string
// }
interface codeIndex extends pageIndex{
code:number
message:string
}
let info:codeIndex = {
code:200,
message:'great',
page:1,
size:20
}
console.log(info);
元组(tuple)
元组:已知元素数量和类型的数组,各个元素的类型不必相同
let x:[string,number]
x = ['11',1 ]
字面量类型
// let 和 const
let a = '123'
const b = '123'
上图,a 的类型是string, b 的类型是他本身,并且b不能被修改,就是本身
// 一般配合联合类型一起使用
function directives(direction:'up'|'down'|'left'|'right'){
}
directives('right')
枚举(enum)
枚举:enum
使用枚举定义一些带名字的常量。 TypeScript支持数字的和基于字符串的枚举。
枚举成员默认有值,且默认是从0开始自增的值
枚举成员的值为数字称为【数字枚举】,
枚举成员的值为字符串称为【字符串枚举】,字符串枚举没有自增长的特点,必须要给字符串枚举设置初始化的值
// 定义一个枚举
enum Direction {
Up,
Down ,
Left,
Right,
}
function enumFun(params:Direction) {
console.log(Direction);
}
// 使用枚举【Direction.值】
enumFun(Direction.Down)
// 字符串枚举
enum Direction2 {
Up ='up',
Down = 'down' ,
Left ='left',
Right='right',
}
any类型
any类型:
ts中不推荐使用any,会失去ts类型保护。(会让typescript变成anyscrpt)
let obj:any ={ x: 0 }
// 访问不存在的属性不报错|给不存在的属性赋值不报错,甚至对于错误的操
//作都不进行报错
obj.aaa
obj.aaa = 10
obj()
/**
* 隐士any
* 声明一个变量不给赋值,也不指定默认值
* 或者函数的参数不指定类型
*/
let a // any
function anyFun (num1){
// 参数num1 是any类型
}