11.1函数,类

any任何类型编译阶段不报错

类型断言

类型断言只能够「欺骗」TypeScript 编译器,无法避免运行时的错误。

语法: 值 as 类型 或者 <类型>值

断言的类型必须在联合类型中存在

let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;

函数:

返回值和参数都给类型,返回值的类型也可自动推出

两种方式为函数定义类型

声明式:只有一种

function add(x: number, y: number): number {
    return x + y;
}

定义式:只要是引用的方式都是

let myAdd = function(x: number, y: number): number { return x + y; };

参数定义后不能传多传少,

区分数组与元祖

//函数有2个参数 是number  和数组(任意数据)  返回值是元祖:2个数据第一个必须是number 第二个必须是数组

function fm(arg1:number,arg2:any[]):[number,any[]]{
   
   return [arg1*arg1,[10,"hello",arg2]]
}

never:永不结束的数据类型

抛出错误,死循环

可选参数:?

interface Params{
    params:object
}
//可选参数
function Myaxiosget(arg1:string,arg2?:Params){}

默认参数:=   给了默认值 这个参数就是可选参数

function fn(arg1:number,agr2:string="test"):void{  //void  空
    console.log(arg1,agr2)
}
fn(100,"hello")
fn(200)    //200 test    因为test为默认参数

参数位置:

1.可选参数放必填参数后面

2.可选参数不传值可用undefined表示(补值)

3.默认参数可放必填参数前面


function  fn(arg1:number,arg2?:boolean,arg3?:string){}
fn(100,undefined,"hello")

bug: 不传值就是用默认的,传值就需要传一个undefined进来使用

剩余参数

...rest

function fn(arg1:number,arg2:string,...rest):void{
    console.log(arg1,arg2,rest)
}

函数类型

定义式比声明式作用更广

参数和返回值来对函数进行分类

(参数1:类型,参数2:类型,...)=>返回值类型

参数名可变

let fn:(arg1:number,arg2:number,arg3:boolean)=>[number,number,boolean];

fn=function(arg1:number,arg3:number,arg2:boolean):[number,number,boolean]{
    return [arg1+100,arg3,arg2]
}

接口

interface MyTool{
    (number):number
}

let fn:MyTool;
fn=(arg:number):number=>{
    return arg*100
}
// fn=(arg:number):string=>"hello"    //报错
interface MyTool{
    ():number
}
interface MyTool2{
   (fn:(arg:number)=>MyTool,fm:number):(arg:number)=>MyTool
}

let fg:MyTool2;
fg=(arg1:(arg:number)=>MyTool,arg2:number):(number)=>MyTool=>{
     //(arg:number)=>MyTool
    return function(a:number):MyTool{return ():number=>100}
}

类:

将数据(属性)以及这些数据上的操作(方法)封装在一起

类和对象是面向对象编程技术中的最基本的概念。

类与对象的关系

  1. 类是对象的抽象,而对象是类的具体实例,是通过new classname产生的。

  2. 类是抽象的,不占用内存,而对象是具体的,占用存储空间。

  3. 类是用于创建对象的蓝图(规划,抽象)。

1.面向对象(OOP)的三大特性:封装、继承、多态;

  封装(Encapsulation):将对数据的操作细节隐藏起来,只暴露对外的接口。外界调用端不需要(也不可能)知道细节,就能通过对外提供的接口来访问该对象,同时也保证了外界无法任意更改对象内部的数据

继承(Inheritance):子类继承父类,子类除了拥有父类的所有特性外,还有一些更具体的特性;

多态(Polymorphism):由继承而产生了相关的不同的类,对同一个方法可以有不同的响应。比如 Cat 和 Dog 都继承自 Animal,但是分别实现了自己的 eat 方法;

2.存取器(getter & setter) 的作用:用以改变属性的读取和赋值行为;

3.修饰符(Modifiers):修饰符是一些关键字,用于限定成员或类型的性质。比如 public 表示公有属性或方法;

4.抽象类(Abstract Class):抽象类是供其他类继承的基类,抽象类不允许被实例化。抽象类中的抽象方法必须在子类中被实现;

5.接口(Interfaces):不同类之间公有的属性或方法,可以抽象成一个接口。接口可以被类实现(implements)。一个类只能继承自另一个类,但是可以实现多个接口;

字段和属性的区别

 constructor(){ }如果写了就是调用自己写的 不写会有一个默认的空的constructor调用

new  创建对象的时候  会自动去调用构造函数

//类属性的声明

class Person{
    //类为未来创建的对象声明属性
    birth:string;
    name:string;
    money:number=100; //类为未来创建的对象声明属性 而且初始化  
    m1 = (a:number, b:number)=>{    //字段
		console.log("m1")
	  }
    color:string;   
    say(){};
    makemoney(){}
    tool(arg:number):number{return 100}
    constructor(arg1:string,arg2?:number){
        this.birth="默认值" //为已经创建对象初始化属性值,属性值是直接生成的数据
        this.name=arg1//为已经创建对象初始化属性值,属性值是创建对象时传入的数据
        // this.money=100
        // this.color="red"//初始化
        arg2&&(this.money=arg2)
    }
}

let p1=new Person("张三")
p1.birth="1995-02-03"//为对象更新属性
p1.color="red"//js中可以为对象添加新成员  TS只能在类内部提前声明
console.log(p1,p1.birth)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zxf318

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值