如何严格键入抽象函数实现typescript

时间:2017-02-21 01:11:00

标签: typescript

说我有这两个类

abstract class Config {
    abstract setName(name: string);
}

class MyConfig extends Config {
    setName(name) {
         // set name.
    }
}

name中的MyConfig参数将属于any类型。如果他们的类型没有被传递,那么输入抽象函数有什么意义呢?有没有办法让它在不触及MyConfig课程的情况下输入?我想为第三方工具进行配置,并且不能指望用户输入抽象函数参数,即使它们应该。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

  

如果抽象函数的类型没有被传递,那么输入抽象函数有什么意义呢?

输入抽象函数的关键是帮助那些选择加入静态类型检查的用户。在这些情况下,静态类型检查可以通过抱怨这个来防止错误:

// compiler: Class 'MyConfig' incorrectly extends base class 'Config'.
class MyConfig extends Config {
    setName(name: number) {

    }
}

对于不选择加入静态类型检查的用户,你是对的。 name中的MyConfig参数将是any类型,编译器不会抱怨类型,并且您对抽象函数的输入无用。

无法强制TypeScript用户选择加入静态类型检查,因为无法阻止用户使用any。那是设计上的。

建议:接受某些用户会选择进行静态类型检查而其他用户则不会。为那些提供类型的人提供类型。