TypeScript mixin受限于另一个mixin

时间:2017-05-19 15:57:03

标签: typescript

我使用的是Typescript 2.2的mixins,并希望使用另一个mixin的属性。

文档显示mixins可以被约束为只混合到某些类......

const WithLocation = <T extends Constructor<Point>>(Base: T) =>
    class extends Base {
        getLocation(): [number, number] {
            return [this.x, this.y];
        }
    }

是否可以将它们限制为只混合到包含另一个mixin的类中?

1 个答案:

答案 0 :(得分:4)

是的,有可能。定义您的其他mixin,以便它由界面支持。例如:

interface Named {
    name: string;
}

function Named<T extends Constructor<{}>>(Base: T) {
    return class extends Base implements Named {
        name: string;
    };
}

然后,您可以在Constructor类型参数的交集类型中使用该接口:

const WithLocation = <T extends Constructor<Point & Named>>(Base: T) =>
    class extends Base {
        getLocation(): [number, number] {
            console.log(this.name); // compiles
            return [this.x, this.y];
        }
    };

const NamedPointWithLocation = WithLocation(Named(Point));
const PointerWithLocation = WithLocation(Point); // error, expects argument to be Named

你可以看到一个更复杂的例子here,它将在使用声明文件进行编译时起作用。