簡體   English   中英

如何使用Typescript從枚舉輸入中推斷方法返回類型?

[英]How to infer a method return type from an enum input with Typescript?

我有一個AudioProcessor枚舉:

export enum AudioProcessors {
  BiquadFilter = 'BiquadFilter',
  StereoPanner = 'StereoPanner',
  DynamicsCompressor = 'Dynamics​Compressor​',
  None = 'None'
}

和AudioProcessorNode類型:

export type AudioProcessorNode = BiquadFilterNode | StereoPannerNode | DynamicsCompressorNode;

我想制作一個使用枚舉並從對應的Node屬性返回對應Node的類方法,但是我不確定如何使Typescript推斷類型,以便:

public getProcessor(audioProcessor: AudioProcessors): AudioProcessorNode {        
   throw new Error(`Method not implemented. ${audioProcessor}`);
}

audioClass.getProcessor(AudioProcessors.BiquadFilter) // returns BiquadFilterNode 

看起來我需要的是類似ReturnType的東西,但是我不知道如何將其放入我的方法簽名中。

您可以使用重載使該方法返回適當的類型:

public getProcessor(audioProcessor: AudioProcessors.BiquadFilter): BiquadFilterNode 
public getProcessor(audioProcessor: AudioProcessors.DynamicsCompressor): DynamicsCompressorNode
public getProcessor(audioProcessor: AudioProcessors.StereoPanner): StereoPannerNode 
public getProcessor(audioProcessor: AudioProcessors): AudioProcessorNode {        
    throw new Error(`Method not implemented. ${audioProcessor}`);
}

或者,您可以使用從枚舉成員到適當的返回類型的映射接口:

interface AudioProcessorNodeMap {
    [AudioProcessors.BiquadFilter] : BiquadFilterNode;
    [AudioProcessors.DynamicsCompressor] : DynamicsCompressorNode;
    [AudioProcessors.StereoPanner] : StereoPannerNode;
    [AudioProcessors.None] : void;
}

class x{

    public getProcessor<T extends AudioProcessors>(audioProcessor: T): AudioProcessorNodeMap[T]
    public getProcessor(audioProcessor: AudioProcessors): AudioProcessorNode {        
        throw new Error(`Method not implemented. ${audioProcessor}`);
    }
}


此版本的優點是,如果您忘記在接口中添加成員,則該方法將出錯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM