注意点:
实现一个带有可选属性的接口并不能创建该属性
只要一个接口继承了某个类,那么就会继承这个类中所有的属性和方法,但是只会继承属性和方法的声明,不会继承属性和方法实现
与 extends 的区别:
extends:继承某个类,继承之后可以使用父类的方法,也可以重写父类的方法
implements:继承某个类,必须重写才可以使用
- export default {}
-
- interface IPersonInfo{
- name:string
- age:number
- sex?:string
- show():void
- }
- interface IMusic{
- music:string
- }
-
- class Person implements IPersonInfo,IMusic{
- name: string='吴谨言'
- age:number=21
- // sex:string='女'
- music:string='雪落下的声音'
- show(){
- console.log(`我叫${this.name},是主演延禧攻略的主演,今年${this.age}岁了`);
- }
- }
- let p = new Person()
- p.show()
- // p.sex='女';//报错
-
- // 注意点:只要一个接口继承了某个类,那么就会继承这个类中所有的属性和方法
- // 但是只会继承属性和方法的声明,不会继承属性和方法实现
-
- interface ITest extends Person{
- salary:number
- }
-
- class Star extends Person implements ITest{
- name: string='关晓彤'
- age:number=20
- salary:number=100000
- }
-
- let s = new Star()
- console.log(s.name);
- console.log(s.salary);
- export default {}
-
- const arr1:string[]=['李易峰','陈伟霆','杨幂'];
- const arr2:Array<string>=['成毅','杨紫']
- const arr3:Array<number>=[12,63,23,48]
-
- // 不使用泛型
- let getArray = (value:number,item:number):number[]=>{
- return new Array(item).fill(value)
- }
- let arr = getArray(10,3)
- // let arr = getArray('zhang',3);//报错
- console.log(arr);
-
- let getArray1 = (value:any,item:number):any[]=>{
- return new Array(item).fill(value)
- }
- console.log(getArray1(10,3));
- console.log(getArray1('白鹿',3));
-
- // 使用泛型
- let getArray2 =
(value:T,item:number):T[]=>{ - return new Array(item).fill(value)
- }
- let res = getArray2<string>('鞠婧祎',2)
- let res1 = getArray2<number>(2,2)
- console.log(res);
- console.log(res1);
- export default {}
-
- // 演示可能出现的问题
- // function getLength
(arr:T):T{ - // console.log(arr.length);
- // return arr
- // }
-
- // 通用方法
- function getLength
(arr:Array):Array{ - console.log(arr.length);
- return arr
- }
- getLength([1,2,3])
- getLength(['赵丽颖','迪丽热巴','杨幂'])
- // getLength('刘亦菲');//报错
-
- // 泛型接口
- interface ILength{
- length:number
- }
- function getLengths
extends ILength>(arr:T):number{ - return arr.length
- }
- getLengths([1,2,3])
- getLengths(['赵丽颖','迪丽热巴','杨幂'])
- getLengths('刘亦菲')
- export default {}
-
- interface IPerson{
- name:string
- sex:string
- }
- let p:IPerson={
- name:'李易峰',
- sex:'男'
- }
-
- interface IPersons
{ - name:T1
- sex:T2
- }
- let ps:IPersons<string,number>={
- name:'杨幂',
- sex:0
- }
-
- interface IPersos
string,T2=string>{ - name:T1
- sex:T2
- }
- let pi:IPersos={
- name:'蔡徐坤',
- sex:'男'
- }
- export default {}
-
- // 泛型类使用<>括起泛型类型,跟在类名后面
- class Person<T1,T2>{
- name:T1
- age:T2
- sex:T1
- constructor(name:T1,age:T2,sex:T1){
- this.name=name
- this.age=age
- this.sex=sex
- }
- }
- const p1 = new Person('白鹿',18,'女')
- const p2 = new Person<string,number>('迪丽热巴',18,'女')
- const p3:Person<string,number>=new Person('白鹿',18,'女')
- export default {}
-
-
- // 1.任何类型都可以赋值给unknown类型
- let str:unknown
- str=18
- str=true
- str='范冰冰'
-
- // 2.不能将unknown类型赋值给其他类型
- let val:unknown=18;
- let num:number;
- // num=val;//报错
- // 使用类型断言
- num = val as number;
- // 使用类型缩小
- if(typeof val == 'number'){
- num=val
- }
-
- // 3.unknown与其它任何类型组成的交叉类型最后都是其他类型
- type MyType1 = number & unknown;
- type MyType2 = unknown & boolean;
- let a:MyType1 = 18;
- let b:MyType2 = true;
-
- // 4.unknown除了与any以外,与其它任何类型组成的联合类型最后都是unknown类型
- type MyType3 = unknown | any;
- type MyType4 = unknown | number;
- type MyType5 = boolean | unknown;
- type MyType6 = unknown | string | boolean;
-
- // 5.never类型是unknown类型的子类型
- type MyType7 = never extends unknown ? true :false;
Map 对象保存键值对,并且能够记;住键的原始插入顺序。
任何值(对象或者原始值)都可以作为一个键或一个值。
Map 是ES6中引入的一种新的数据结构
可以使用for of进行迭代
创建Map:
let myMap = new Map();
Map相关的函数与属性:
- export default {}
-
- // 创建Map对象
- let myMap = new Map()
-
- // 设置Map对象
- myMap.set('李易峰',1)
- myMap.set('陈伟霆',2)
- myMap.set('黄明昊',3)
-
- // 获取键对应的值
- console.log(myMap.get('李易峰'));//1
- console.log(myMap.get('唐嫣'));//因为不存在,所以是undefined
-
- // 判断Map中是否包含键对应的值
- console.log(myMap.has('黄明昊'));//true
- console.log(myMap.has('虞书欣'));//false
-
- // 返回Map对象键/值的对应的数量
- console.log(myMap.size);//3
-
- // 删除
- // console.log(myMap.delete('李易峰'));//true
- console.log(myMap.delete('李易峰11'));//false
-
- // 移除Map对象的所有键/值对
- // myMap.clear()
- // console.log(myMap);
-
- // 迭代Map中的key
- for(let key of myMap.keys()){
- console.log(key);
- }
-
- // 迭代Map中的value
- for(let value of myMap.values()){
- console.log(value);
- }
-
- // 迭代Map中的key => value
- for(let entry of myMap.entries()){
- console.log(entry);
- }
-
- // 使用对象解析
- for (let [key,value] of myMap) {
- console.log(key,value);
- }
- export default {}
-
- // 复习三元运算符 x=y?a:b
- let score=56
- let result=''
- result=score>=60?'及格':'不及格'
- console.log(result);
-
-
- // 条件类型
- type MyType
=T extends string ? string :any; - type res = MyType<string>
-
-
- interface IName{
- name:string
- }
- interface IAge{
- age:number
- }
- type Condition
=T extends string ? IName :IAge; -
- function reLoad
extends number | string>(idOrName:T):Condition{ - throw "";
- }
- reLoad(19)
- reLoad('bobo')
- export default {}
-
- // Record映射类型
- //他会将一个类型的所有属性值都映刻到另一个类型上并创造一个新的类型
-
- type Name="person" | "animal";
- type Person ={
- name:string
- age:number
- }
-
- type NewType=Record<Name,Person>;
- let res:NewType = {
- person:{
- name:'唐艺昕',
- age:18
- },
- animal:{
- name:'云梦',
- age:15
- }
- }
- console.log(res);
-
- // Pick映射类型
- // 将原有类型中的部分内容映射到新类型中
- interface IPerson{
- name:string
- age:number
- }
- type MyType = Pick<IPerson,'name'>;
- let res1:MyType={
- name:'韩雪'
- }
- console.log(res1);