带有Type作为键打字稿的字典

时间:2017-01-13 22:09:06

标签: angular dictionary typescript

我想创建一个以Types作为值的字典。

f.e,在C#中,我会做:Dictionary<Type, WhateverINeed>,但在打字稿中我真的知道可以做到这一点。

我在type.d.ts中遇到@angulalr/core,但我不知道如何使用它。我已经看到泛型类使用了Route接口,您可以在其中为路径提供Component类。

基本上,我想在类型和该类的Observable之间创建一个映射

但我知道的唯一字典键类型可以与Typescript的字典一起使用intstring

用例可以是:

service.method<MyClass>(...)

service.method(MyClass, ...)

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

这基本上是Map<,>的类型安全包装器,它只适用于具体的类(函数):

import {Type} from '@angular/core';

class Service
{
    private map = new Map<Type<any>, Observable<any>>();

    public set<T>(key:Type<T>, value:Observable<T>):void
    {
        this.map.set(key, value);
    }

    public get<T>(key:Type<T>):Observable<T>
    {
        return this.map.get(key);
    }
}

const service = new Service();


service.set(MenuModel, Observable.of(new MenuModel()));
service.set(Number, Observable.of(0));

service.get(MenuModel).subscribe(model => console.debug('menu', model.userMenu));
service.get(Number).subscribe(model => console.debug('number', model));