ts实战系列五:object类型和函数

本文探讨了接口在JavaScript中的作用,如何作为规范描述对象的属性和方法,以及鸭子类型的概念。通过类的继承和接口的使用,解决了共享特性的复用问题。同时,函数作为第一等公民,被深入解析,包括函数声明、函数表达式和泛型接口的使用示例。
摘要由CSDN通过智能技术生成

5. object类型:

(1). interface接口:

. 不是一种类型.. 更像规范与契约,规定一个对象长成什么样子.

(2). 对对象的shape(形状:属性、方法)进行描述:

. 对类(class)进行抽象.. Duck Typing(鸭子类型):
    a. 当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子.
    b. 并不关心对象是什么类型,到底是不是鸭子,只关心行为.. 举例:
    interface IPerson {
        readonly id: number,   // 只读属性,只能在创建时被赋值
        name: string;
        age?: number;          // ?表示可选
    }
    let person: Person = {
        id: 123,
        name: 'david',
        age: 20
    }
    person.id = 234;           // 报错,定义了readonly

(3). 对类的形状进行描述:

. 解决了什么?
    a. 不同类之间会有共用的特性,不太好用子类继承父类来实现.
    b. 可以把特性提取成接口,implements来实现.. 举例:
    interface Radio {
        switchRadio(type: string): void;
    }
    interface Battery {
        checkBattery();
    }
    interface RadioBattery extends Radio {
        switchRadio(type: string): void;
    }
    // 实现
    class Car implements Radio {
        switchRadio() {}
    }
    class Phone implements Radio, Battery {
        switchRadio() {}
        checkBattery() {}
    }
    class Test implements RadioBattery {
        switchRadio() {}
        checkBattery() {}
    }

6. 函数:

. 可以做为参数、存入数组、可以被另外一个函数返回,可以赋值给另外一个变量.. 函数声明:
    // 直接声明参数和返回值类型
    function add(x: number, z?: number = 10): number {  // 有些不写返回值类型,是因为有类型推断.
        return x;
    }. 函数表达式:
    const add = function(x: number, z?: number = 10): number {
        return x;
    }
    const add2 string = add;    // 报错,函数类型是(x: number, z?: number) => number,这里的=>不是箭头函数.. 直接声明函数类型:
    export const useMount = (fn: () => void) => {  // () => void,没有参数,什么也不返回
        useEffect(() => {
            fn();
        }, []);
    };
    const isFalsy: (value: any) => boolean = (value) => {
        return value === 0 ? true : !!value;
    };

(1). interface描述如上函数:

interface IPlus {
    (a: number, b: number): number
}
function plus(a: number, b: number): number {
    return a + b;
}
const a: IPlus = plus(1, 2)

(2). interface描述改进为泛型定义:

interface IPlus<T> {
    (a: T, b: T): T
}
function plus(a: number, b: number): number {
    return a + b;
}
const a: IPlus<number> = plus(1, 2)
function con(a: string, b: string): string {
    return a + b;
}
const b: IPlus<string> = plus('a', 'b')      // 传入不同的泛型值,可以适配不同的类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值