【问题标题】:Typescript: Implementing an Interface with a static/unnamed function打字稿:使用静态/未命名函数实现接口
【发布时间】:2015-08-12 04:36:34
【问题描述】:

我需要实现d.ts 文件的以下(简化)Typescript 接口:

interface SomeLibrary {
    someProperty: SomePropertyClass;
    someMethod();
    (someParam: string): SomeClass; // don't know hot to implement this
}

如何在自己的类中实现这个接口?尤其是未命名的方法是有问题的。这些方法是怎么调用的?

【问题讨论】:

标签: typescript


【解决方案1】:

TypeScript 中的类无法满足您展示的界面。

创建这样的接口通常是为了描述使用不同模式的库。

如何满足接口的一个示例如下所示:

var example: SomeLibrary = <any> function(someParam: string) {
    console.log('function called');
    return new SomeClass();
}
example.someProperty = new SomePropertyClass();
example.someMethod = function () { console.log('method called'); };

var x = example('x');
var y = example.someProperty;
var z = example.someMethod();

【讨论】:

  • 本例中的&lt;any&gt; 是什么意思?
  • 该表达式中的函数实际上并不满足接口(因为它缺少someProperty 和someMethod 成员)。出于这个原因,您需要调整类型以告诉编译器我知道这种类型会没问题,即使它看起来不像您。如果您忘记添加接下来的两行,则会导致运行时问题!
  • 它是转换为 any 类型吗?
  • 是 - 一个类型断言,将函数扩大到any,因此可以通过前面的SomeLibrary 类型注释来缩小范围。
猜你喜欢
  • 2017-08-31
  • 2021-04-18
  • 2016-04-04
  • 2013-01-26
  • 2017-06-29
  • 2021-04-27
  • 2021-04-12
  • 2020-12-15
相关资源
最近更新 更多