第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Flow中的可組合合同和正合同

Flow中的可組合合同和正合同

元芳怎么了 2021-05-10 17:01:19
我在Flow中遇到問題,其中一個給定的實現(xiàn)type通過要求我僅使用在上聲明的屬性來限制我的對象API,type而不是要求我聲明所有type的屬性。我是Flow的新手,所以我可能會犯一些基本的錯誤和錯誤。無論如何,我有這樣的type聲明:type Unit = {  of(value: any): Monad,};我在這里要說的是:根據(jù)實現(xiàn)的所有對象都Unit必須具有一個#of接收給定value并返回Monad-type值的方法。當(dāng)我在工廠實施它時,沒有出現(xiàn)問題:const Maybe: Unit = {    isMaybe: (obj): boolean => { ... },    of: (value): Monad => { ... },};但是,當(dāng)我嘗試致電時#isMaybe,出現(xiàn)了這個錯誤(在linter上):flow(0|2), isMaybe (Cannot call: `Maybe.isMaybe` because property `isMaybe` is missing in `Unit` [1].)現(xiàn)在,我嘗試聲明#isMaybe,Unit并且錯誤按預(yù)期消失了。問題是,Unit應(yīng)該是一種自由接口,該接口檢查其實現(xiàn)是否具有Unit屬性,而不僅僅是 Unit屬性。我無法將-至少不是我所知道的-Unit從a重構(gòu)type為a,interface因為我是通過is-a關(guān)系來構(gòu)成它們的:type Monad = Applicative & Chain; // Monad is-a Applicative and a Chain有沒有什么方法可以使Flow既可以肯定又可以簽訂合同?
查看完整描述

2 回答

?
德瑪西亞99

TA貢獻1770條經(jīng)驗 獲得超3個贊

我對肯定和可組合性也不是很熟悉,但是我認為interfaces可以幫助解決問題。您可以輕松擴展aninterface并將一個變量聲明為one。請查看以下示例,以了解如何使用和擴展接口。請注意,在這種特殊情況下,無需遍歷所有類。


type Monad = any;


interface Unit {

  of(value: any): Monad;

}


const unit: Unit = {

  of(value: any): Monad {

    return value;

  }

}


const notUnit: Unit = {};


const alsoNotUnit: Unit = {

  isMaybe(value: any): boolean {

    return false;

  }

}


interface Maybe extends Unit {

  isMaybe(value: any): boolean;

}


const maybe: Maybe = {

  isMaybe(value: any): boolean {

    return true;

  },

  of(value: any): Monad {

    return value;

  }

}


const notMaybe: Maybe = {

  isMaybe(value: any): boolean {

    return true;

  }

};


const alsoNotMaybe: Maybe = {

  of(value: any): Monad {

    return value;

  }

}

試流

提醒您一點,因為我看到您使用了&交集類型運算符-交集類型當(dāng)前在Flow中是斷開的并且不一致。我建議暫時不使用它們。它們的大多數(shù)行為都可以通過其他更正確的方法來完成,例如散布算子或extends。


查看完整回答
反對 回復(fù) 2021-05-13
?
小怪獸愛吃肉

TA貢獻1852條經(jīng)驗 獲得超1個贊

我對您的意思不是很熟悉,“有什么方法可以使Flow產(chǎn)生積極的和可組合的合同嗎?” (我假設(shè)這是來自另一種語言嗎?),并且我還沒有按照您描述的方式使用流程;這是將函數(shù)定義定義為類型的一部分,但我希望這里的方法會對您有所幫助。


我在這里要做的第一件事是為 MaybeUnit


export type MaybeUnit = Unit &{

  isMaybe: (obj): boolean

};

但是,我再一次不熟悉該函數(shù)是否屬于該類型。每當(dāng)我想要一個函數(shù)時,我都會定義一個類(可能帶有interface)而不是類型。這可能會將您的實現(xiàn)更改為如下所示:


interface IUnit {

  of(value: any): Monad;

}


class Unit implements IUnit {

  of(value): Monad { 

    return new Monad();

  }

}


interface IMaybeUnit extends IUnit {

  isMaybe({}): boolean;

}


class MaybeUnit extends Unit implements IMaybeUnit {

  isMaybe({}): boolean { 

    return true;

  }

}

希望這種方法可以解決您的問題。


更新:添加一個示例,說明我有時對管理器類所做的事情。這是一種非常冗長的方法,并且僅在某些情況下適用。當(dāng)使用流運行時以便在執(zhí)行時而不是在構(gòu)建時測試類型時,它也更加有用。


class UnitManager {


  static UnitTypes:Map<string, IUnit>;


  static RegisterUnitType( key:string, klass:Class ) {

    UnitManager.UnitTypes.set( key, klass );

  }


  static CreateUnit( unit:IUnit ):Unit {

    // test data to determine type

    let type:string = UnitManager.GetUnitType( unit );

    let klass:Class = UnitManager.UnitTypes.get( type );

    return new klass( unit );

  }


  static GetUnitType( unit:IUnit ):IUnit {

    // Magic. Your logic to determine the type based on the data provided. if you use flow-runtime, you can use instanceOf, otherwise I think you need to test if the keys exist in the data, or something.

  }

}

一開始我沒有包括它,因為它不是很干凈,并且通常會是反模式。在某些情況下這很有用,我發(fā)現(xiàn)自己主要是為了避免循環(huán)依賴。


有時我會這樣做,以便每個類的構(gòu)造函數(shù)根據(jù)其類中的靜態(tài)“名稱”常量向管理器注冊自己。


查看完整回答
反對 回復(fù) 2021-05-13
  • 2 回答
  • 0 關(guān)注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號