繁体   English   中英

如何扩展Typescript接口?

[英]How to extend a Typescript interface?

例如,我有一个接口:

interface Foo {
  value1: number;
  value2: number;
}

我想添加一个sum()方法,该方法可以在此接口的任何实例上为我提供值的总和。 Typescript的处理方式是什么?

我需要能够编写如下函数:

function printFooSum(foo: Foo) {
  console.log(???);
}

并且该函数不应涉及将foo属性手动分配给某些其他类。

通过extends关键字扩展TypeScript接口:

interface Foo {
  value1: number;
  value2: number;
}

interface Bar extends Foo {
  sum() : number;
}

通过以下方式实现接口:

class Baz implements Bar {
  public value1: number;
  public value2: number;
  sum() : number { return this.value1 + this.value2; }
}
var bar : Bar = new Baz();

注意: implements Bar部分是可选的。 由于Baz实例具有必需的属性,因此它们仍可分配给Bar插槽。 但是,添加implements Bar将强制编译器检查Baz类的Bar接口,如果没有实现,则会在Baz上抛出编译时错误。

一种实现方法如下:

interface Foo {
  value1: number;
  value2: number;
}

class Foo {
  public static sum(foo: Foo) {
    return foo.value1 + foo.value2;
  }
}

function printFooSum(foo: Foo) {
  console.log(Foo.sum(foo));
}

但是也许有一种更优雅的方式...

我认为您可以执行以下操作:

interface Foo1 extends Foo {
  suma(): number
}

interface Foo{
  value1: number;
  value2: number;
}

http://www.typescriptlang.org/docs/handbook/interfaces.html#extending-interfaces


您添加此:

我需要能够编写如下函数:

function printFooSum(foo: Foo) {
  console.log(???);
}

但是这部分并不能很好地理解:

并且该函数不应涉及将foo属性手动分配给某些其他类。

您不想这样做吗?

function printFooSum(foo: Foo) {
  console.log(foo.value1 + foo.value2);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM