TS基础了解二

目录

1、函数 

2、类


1、函数

(1)参数列表里面的每个参数都需要名称和类型(形参、实参、返回值都要)。我们可以给每个参数添加类型之后再为函数本身添加返回值类型。 TypeScript能够根据返回语句自动推断出返回值类型,因此我们通常省略它。

// 函数有两个参数,第一个参数表示数字,第二个表示任类型的数组
// 参数少了不行
// :[number,any[]]表示返回的是元组,第一个数字,第二个是任意类型的数组
function fm (arg1:number,arg2:any[]):[number,any[]]{
return [arg1*arg1,[10,"hello",arg2]]
}

let [x,y]=fm(100,[10,20,true]) // 解构赋值
console.log(x,y);

(2)为函数定义类型

// 声明式:只有一种

function add(x: number, y: number): number {
    return x + y;
}
// 定义式:只要是引用的方式都是
let myAdd = function(x: number, y: number): number { return x + y; };

区别:定义式可以改变this的指向,call、apply、bound

(3)可选参数和默认参数

可选参数加?号;

// 函数可选参数
// 接口
interface Params{
    params:object
}
// 要求arg2 是Params的类型,且必须带有params:object
function Myaxiosget(arg1:string,arg2?:Params){};
Myaxiosget('http://xxx',{params:{}}); // 可选或者不可选
Myaxiosget('http://xxx');

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

// 函数默认参数
function fn(arg1:number,arg2:string='test'):void{
    console.log(arg1,arg2)
}
 
fn(100,'hello'); // 传了第二个参数,打印传的参数
fn(200)   // 没传第二个参数,打印默认的参数

cmd打印的结果如下

 (4)函数参数位置问题

4.1 可选参数只能放在必选参数的后面,放在前面会报错。

function fn (arg1?:string,arg2:number){

}
fn('hello') // 报错
function fn (arg1:string,arg2?:number){

}
fn('hello') // 不报错

4.2  如果有两个参数可选,怎么调用? 传 undefined

4.3 默认参数放在任意位置都可以

// 如果有两个参数可选,怎么调用? 传undefined

function fn (arg1:string,arg2?:number,arg3?:boolean){
    console.log(arg1,arg2,arg3); // 打印 hello undefined true
    
    }
    fn('hello',undefined,true)


function fn (arg1:string,arg2?:number,arg3?:number){
console.log(arg1,arg2,arg3); // 打印 hello undefined 100

}
fn('hello',undefined,100)


// 默认参数放在任意位置都可以

function fn (arg1:string,arg2:number=100,arg3:number){
    console.log(arg1,arg2,arg3); // 打印 hello 100 200
    
    }
    fn('hello',undefined,200)

function fn (arg1:string="123",arg2?:number,arg3?:boolean){
    console.log(arg1,arg2,arg3); // 打印 123 undefined true
    
    }
    fn(undefined,undefined,true)

(5)剩余参数

1.1 当传的参数多了,不可能一一写完,就用剩余参数。想传多少就传多少。

// 剩余参数
function fn(arg1:number,arg2:string,...rest):void{
    console.log(arg1,arg2,rest);
}
fn(100,"hello",200,300);
fn(100,"hello",200);

1.2 表示剩余参数的类型是一个number类型的数组

function fn(...rest:number[]):void{
    console.log(rest);
    
}
fn(1,2,3)

(6)函数类型

第一种:定义式写法

// 定义式写法
let fn = function(arg1:number):number {
    return arg1+1
}
fn(10)

第二种:声明式写法

function fn(arg1:number):number {
    return 200
}

注意:函数通过参数和返回值来对函数进行分类

6.1 函数类型写法

// 函数类型写法
// (参数1:类型,参数2:类型,....)=>返回值类型
let fn:(number)=>number;

注意:这不是箭头函数,表示函数的类型是number,有一个形参,是number。

6.2 函数认准位置,不关心单词。

// 注意 arg2 和 arg3 的位置
let fn:(arg1:number,arg2:number,arg3:boolean)=>[number,number,boolean];
fn= function (arg1:number,arg3:number ,arg2:boolean) {
    return [arg1,arg3,arg2]
}

6.3 箭头函数,注意返回的值,和函数的类型区别开来

let fn=(arg1:number):number=>arg1;

6.4 前面箭头表示函数返回的类型,后面表示箭头函数

let fn:(number)=>number=(arg1:number):number=>arg1;

6.5 返回类型是函数的必要类型,如果不写,加void。

       可以不加返回值return。

// 不写return ,加void
function fn(arg:number):void{
    console.log(arg)
}

// 写return,写返回值的类型
function fn(arg:number):number{
    return 10;
}

// 定义式函数不加return,写void的写法
let fn:(number)=>void

6.6 描述函数类型的另外一种方式

      interface 接口表示方式,用在对象上。

      (number)表示参数的类型

       :number 表示返回值的类型

interface mytool {
    (number): number
    // 表示参数的类型
}

let fn:mytool;
fn = (arg:number):number=>{
    return arg+1;
}

6.7 难点 开发时不这样写

arg3 表示返回值是元组的类型

注意元组和数组的区别

数组:any[]

元组:[]

2、类

(1)类的定义

1. 定义类的关键字为 class;

2. 类体中声明类的成员(都是可选的)

- 字段 −  也就是属性,可包含0到多个
- 构造函数 −  constructor,可包含0到1个
- 方法 − 也就是行为动作,可包含0到多个

(2)类的属性

class Person {
    constructor() {
        console.log(123);
        // 如果写了constructor就是调用自己写的,不写会有一个默认的空的constructor调用
        // new 创建对象的时候 会自动去调用构造函数
    }

    say() {
        console.log("say被调用了");

    }
}

let p1: Person = new Person;
console.log(p1);
p1.say()

(3)类属性的声明

 TS 只能在类内部提前声明,成员只能在类里面写,脱离了类就会报错,所以统一在类里面声明未来创建的对象声明属性。

猜你喜欢

转载自blog.csdn.net/weixin_50961131/article/details/127630346
今日推荐