其他分享
首页 > 其他分享> > Typescript 中的函数式 OOP

Typescript 中的函数式 OOP

作者:互联网

网络上不乏关于classesJavascript 有多糟糕的讨论。因此,我一直在试图弄清楚如何将 OOP 概念转化为它的功能等价物(特别是在 Typescript 中),以及它是否可能首先出现。

常规班

 Trader {
    构造函数
        私有项:字符串
    ){}

    打印){
        控制台日志这个项目);
    } 

    setItemnewItem:字符串){
        这个项目=新项目;
    } 

    getItem ( ) {
        返回 这个项目; 
    }

    交易你的:交易员){ 
        const temp = this . 物品; 
        这个setItem ( yours.getItem ( )); 
        你的。设置项目(温度);
    } 
}

要将其转换为等效的功能,我们可以简单地将类更改为函数并返回任何公共属性或方法。

function  Trader ( it: string ) {
    item = it; 

    功能 打印){
        控制台日志(项目);
    } 

    function  setItem ( newItem: string ) { 
        item = newItem; 
    } 

    function  getItem ( ) {
        返回项目;
    }

    返回{
        打印,
        setItem,
        getItem 
    } 
}

传递自身的实例

交易方法有点棘手。在传统的 OOP 中,使用 trade 方法类似于

交易员1.贸易(交易员2);.贸易(贸易商2);

由于我们现在正在处理函数,因此将 trader2 作为函数传递是行不通的。

// 此处的编译器抱怨 Trader 被用作类型并
// 询问您是否指的是“typeof Trader”,但这仍然不是我们想要的。
function  trade ( yours: Trader ) { 
    const temp = item; 
    setItem ( yours.getItem ( )); 
    你的。设置项目(温度);
}

有点不直观,您实际上想在这里做的是声明ReturnType我们正在制作的功能类的 。

function  trade ( yours: ReturnType< typeof Trader> ) { 
    const temp = item; 
    setItem ( yours.getItem ( )); 
    你的。设置项目(温度);
}

继承呢?

出口类型珠宝= “戒指” | “项链”

函数 JewelryTrader ( item: Jewelry ) { 
    const parent = Trader (item) 
    
    function  setItem ( newItem: Jewelry ) { 
        parent. setItem (newItem) 
    } 

    function  trade ( yours: ReturnType< typeof JewelryTrader> ) { 
        parent. 交易(你的作为 ReturnType < typeof  Trader >);
    返回
  
    _{ 
        ...parent, 
        setItem,     // 在这里我们覆盖父
        交易的函数
    } 
}

注意这里的顺序。要覆盖我们父级的方法,我们需要确保我们的方法在父级之后。

标签:Typescript,函数式,avascript,构造函数,贸易,项目
来源: