[英]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.