解决打字稿和F界多态性

时间:2018-09-19 16:17:45

标签: typescript

我在Masala Parser中有3种解析器。 SingleParser<Y>返回一个Y值,ArrayParser<Y>返回一个Array<Y>VoidParser不返回任何值。 它们都是IParser<Y>,包含许多常用功能。

它在javascript上运行,但我想制作 masala.d.ts 类型的文件。我想优化不再重复的map()

export interface IParser<T> {

    map<Y> (f: (T) => Y): IParser<Y>;
    // common functions
    debug(s:string, b?:boolean); // ... others
}

interface VoidParser extends IParser<void> {
    map<Y> (f: (T) => Y): VoidParser<Y>;
}

export interface SingleParser<T> extends IParser<T> {
    map<Y> (f: (T) => Y): SingleParser<Y>;
}

export interface ArrayParser<T> extends IParser<T> {
    map<Y> (f: (T) => Y): ArrayParser<Y>;
}

它们有许多功能,例如map(),我想使用 this 来简化IParser:

export interface IParser<T> {

    map<Y> (f: (T) => Y): this<Y>;
    // common functions ...
}

很遗憾,此处不接受this<Y>(使用打字稿2.6或3.0)。正确的语法是什么?

0 个答案:

没有答案