ts学习之基础知识1(ts种定义属性的写法,类型注解和类型推断,interface对象类型。。。

更新时间:2023-07-08 13:33:32 阅读: 评论:0

ts学习之基础知识1(ts种定义属性的写法,类型注解和类型推断,interface对
象类型。。。
ts种定义属性的写法怎么调时间
基本类型属性
let num: number =11;
let str: string ='11';
对象类型属性
let obj:{ name: string }={ name:'张三'}
数组类型属性深刻反思
let arr: number[]=[1,2]//代表类型是数组,并且数组⾥⾯只能是数字
class类型属性
class Person();const obj:Person =new Person();//代表函数对象
class Person{
age:number;
constructor(){
this.age =18
}
}
函数类型属性
const fn:()=>number=()=>{return123;}//代表返回类型为数字的函数
类型注解和类型推断
(1)类型注解:
就是像上⾯这样,⾃⼰告诉ts使⽤什么类型,使⽤情况是ts⽆法推断出来的变量
(2)类型推断:
ts⾃动根据内容推断出是什么类型
(3)那什么时候使⽤类型注解呢
function fn( num1 , num2 ){return num1+num2 }let count =fn(1,2)
//像上⾯代码是⽆法推断出num1和2的类型的,那么就需要做类型注解
像下⾯的代码:
function fn( num1: number , num2: number){return num1+num2 }//这样就能检测到类型
(4)并且对于函数的类型注解,可以设置整体函数返回的值的类型
function fn( num1: number , num2: number): string {return num1+num2+'11'}//表⽰返回的类型是字符串类型
(5)如果传进去函数的是⼀个对象作为参数呢
function fn({num1 , num2}:{ num1 : number, num2 : string }): string {return num1+num2 }//在函数内这样注解
梦见蛇咬手fn({ num1:1, num2 :'123'}//传值
(6)数组内有多种类型的注解⽅法:
let arr:(string | number)[]=['1','2',3]//这⾥是两种类型
let arr1: any[]=['1',1,[],{}]//代表所有类型都可以
(7)类型别名的⽤法,如下⾯代码:
let obj : objName =[{'name':'11','age':18},{'name':'22','age':20}];
type objName ={ name:string,age:number }//这⾥定义属性类型
(8)元组使⽤⽅法:
let arr:[ string, string, number ]=['a','b',1];//规定好每⼀项的类型
//⼆维数组
let arr1:[ string, string, number ][]=[['a','b',1],['a','b',1],['a','b',1]]
let arr:[ string , string, number, number ]=['a','b',1];//会报错
interface对象类型
网上购物的优点作⽤:定义 对象 的类型,其实就是校验⼯具,⽤法如下:
⾸先是interface接⼝的使⽤规范:
1、定义的对象第⼀字母⼤写
2、注意interface⾥⾯每⼀个属性定义类型时候⽤分号隔开
使⽤:
interface Person { name:string;x:string }//定义属性类型
let obj: Person ={ name:'11', x:'男'}//基本使⽤⽅法
interface Person { name:string; x:string; age?:number }//?: 表⽰可有可⽆属性
let obj: Person ={ name:'11', x:'男'}// ?: 表⽰可有可⽆属性
interface Person { name:string; x:string;[propName:string]: any;}遥远的英语
let obj: Person ={ name:'11', x:'男', a:1, b:2, c:3}
//上⾯这段代码中[propName:string] : any  ,[propName:string]代表的是属性是字符串类型的属性,如abc ,属性值是任意类型
再⽐如:
interface Person { name:string; x:string;[propName:string]: any;}
let obj: Person ={ name:'11', x:'男', a:1, b:2,run(){return'11'}}//这⾥多了个⽅法,也可以的
//但是
//如果再定义个⽅法:
interface Person { name:string; x:string;[propName:string]: any;run():number}//这⾥代表的是run⽅法返回的必须是数字类型let obj: Person ={ name:'11', x:'男', a:1, b:2,run(){return'11'}}
再如:只读类型
interface Person { readonly name:string;x:string }//加⼀个readonly 就可以
let obj: Person ={ name:'11', x:'男'}
ts⾥⾯关于类的写法,它是综合了es6和es7
⾸先es6的写法:
class Person ({constructor(){this.name ='张三'}})//类的内容必须放到constructor⾥⾯,然后使⽤this标注以下
然后es7写法:
calss Person({ name ='李四'constructor(){}})//不需要this,并且constructor可有可⽆
那上⾯如何使⽤上⾯这个类呢,只需要:
let obj =new Person()//这样,之后就可以使⽤obj.name  得到张三香桂树
那如何实现类的继承呢,只需要这样
class Child extends Person {}let obj =new Child
// 这样就继承上⾯的parent类,出来了child类,它带有⽗类的所有属性,new下就可以⽤,并且遵循原型链
再如:如果想要再⼦类去拿⽗类的作为⼦类的东西,可以这样
class Child extends Person {run(){return super.run()}}
ts⾥⾯关于类的使⽤
类的修饰符:
public : 表⽰定义的属性,只能再任何地⽅都能访问到
公放
private: 表⽰定义属性或者⽅法只能再类的内部访问到
⽐如:再⽗类⾥⾯定义⼀个private name :string 如果使⽤的时候 ⽐如拿来⽤: obj.name 就 会报错 ⽐如继承给⼦类,⼦类拿来⽤this.name 也会报错
protected: 类似private ,但这个可以再⼦类中使⽤ ,不会报错
然后正常使⽤类是如何使⽤的呢:
class Parent { name: string;constructor(){this.name ='zhnagsan'}}
class child extends Parent {}
其实可以简写:
⽐如:
class Parent {public name: string;constructor( name: string ){this.name = name }}
可以简写成:
class Parennt {constructor(public name: string ){}}//这样⼦就代表定义了类型,并且省去了this.name = name
然后继承的时候也可以使⽤,⽐如:
class child extends Parent{constructor(public age:number ){super('张三')}}//这⾥继承的时候,⾃⼰定义age属性,并且必须需要使⽤super()来拿到⽗级的东西
类的存取器
如果想要在类外部使⽤私有属性呢,就可以⽤到你类的存取器
class Parent {constructor(private _name: string){}//这⾥定义了⼀个类注意,要使⽤name这个属性,就需要在这个属性⾯前加下横线
get name(){return this._name  }//读取私有属性
t name(name){this._name = name  }//赋值私有属性
}
//最后看:
let obj =new Parent('张三')
obj.name ='李四'//这⾥才可以赋值
console.log(obj.name);//这⾥才可以读取
抽象类abstract
作⽤:就是定义抽象类和抽象⽅法,抽象是什么意思呢,就是⽐如定义⼀个dog类,⼀个cat类,然后再定义⼀个抽象类⽐如animal类,这个animal类就是⽤来定义前⾯两个类相同的属性,。抽象⽅法就是他们都会⽤到的⽅法,但是抽象类是不可以实例化,就是拿来⽤的
//抽象类
月同
abstract  class animal {//类似interface
age:number;
getType(){
return'animal'
}
abstract call():string
}
class Dog extends animal {
call(){//定义了抽象类,就必须再⼦类中使⽤return'汪汪'
}
}
class Cat extends animal {
call(){
return'喵喵'
}
}

本文发布于:2023-07-08 13:33:32,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1073015.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:类型   属性   定义   注解
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图