我有一个自定义类型dictionaryItemLanguage
:
type dictionaryItemLanguage = Map<string, Map<string, IDictItem>>;
我需要像这样初始化BehaviorSubject
export const Dictionary: BehaviorSubject<dictionaryItemLanguage> = new BehaviorSubject(new Map<string, Map<string, IDictItem>>());
但替换为dictionaryItemLanguage
:
export const Dictionary: BehaviorSubject<dictionaryItemLanguage> = new BehaviorSubject(new dictionaryItemLanguage());
在TypeScript中可以吗?我尝试过DRY。
答案 0 :(得分:2)
首先,我在这里看到的是您尝试在语句中使用type
作为类/构造函数,这是行不通的:
export const Dictionary: BehaviorSubject<dictionaryItemLanguage> = new BehaviorSubject(new dictionaryItemLanguage());
第一个语句将起作用,因为您可以使用现有的Map类
export const Dictionary: BehaviorSubject<dictionaryItemLanguage> = new BehaviorSubject(new Map<string, Map<string, IDictItem>>());
别忘了在编译步骤之后所有打字稿内容都会消失,并且类型和接口不能编译成任何东西,请检查一下自己
如果要使用新运算符,则至少要创建类。
如果您只想让BehaviorSubject与您的dictionaryItemLanguage类型的项一起使用,并且每次都想避免使用新的Map>()语句,我可以建议:
interface IDictItem {
value: string;
}
type dictionaryItemLanguage = Map<string, Map<string, IDictItem>>;
const createDictionary: () => dictionaryItemLanguage = () => {
return new Map<string, Map<string, IDictItem>>();
};
const dictionary = new BehaviorSubject<dictionaryItemLanguage>(createDictionary());
dictionary.getValue();
这里有一个函数,该函数将始终返回先前定义的类型dictionaryItemLanguage
的新Map,返回值dictionary.getValue();
将会是Map<string, Map<string, IDictItem>>
或dictionaryItemLanguage
,因为type
只是类型别名。