数据类型应该是模块打字稿内的任何内容

时间:2017-01-11 11:46:30

标签: typescript

是否可以使用数据类型而不是any,这是这样的模块的一部分:

module SomeModule  {
    export class One  { 
        // ...
    }

    export class Two { 
        // ...
    }

    // ...
}

我需要这样的东西:

function bla(myModel: anyThingInsideModule_insteadOfAnyDataType){...}

这可能吗?

2 个答案:

答案 0 :(得分:1)

不,但您可以让他们实现/扩展基础接口/类:

module SomeModule {
    export interface Base { }

    export class One implements Base { }

    export class Two implements Base { }
}

function bla(myModel: SomeModule.Base) { }

或者:

module SomeModule {
    export abstract class Base { }

    export class One extends Base { }

    export class Two extends Base { }
}

您还可以使该功能通用:

function bla<T extends SomeModule.Base>(myModel: T) { }

答案 1 :(得分:1)

在TypeScript 2.0中,您可以为参数甚至变量指定多种可能的数据类型:

function bla (myModel: One | Two)

然后你可以使用任何一种类型的参数。

修改 在SomeModel非常大的情况下,如下面的评论所示(显然是100多个类,我认为这是糟糕的设计,但是嘿,我还没有评判),最简单的方法就是创建一个{{ 1}} abstract中的基类,并且模型中的每个类都来自于它。

SomeModel

然后你可以写

export abstract class MyModelClass { /* Any shared logic here */ }

export class One extends MyModelClass { ... }

export class Two extends MyModelClass { ... }

...