[英]How to infer a method return type from an enum input with Typescript?
我有一個AudioProcessor枚舉:
export enum AudioProcessors {
BiquadFilter = 'BiquadFilter',
StereoPanner = 'StereoPanner',
DynamicsCompressor = 'DynamicsCompressor',
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.