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,     // 在这里我们覆盖父
        交易的函数
    } 
}

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

本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;

2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;

3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;

4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;

5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/293853.html

(0)
上一篇 2022年11月29日
下一篇 2022年11月29日

相关推荐

发表回复

登录后才能评论