例如,我有一个界面:
interface Foo {
value1: number;
value2: number;
}
我想添加一个sum()方法,它会在这个接口的任何实例上给出一个值的总和。什么是Typescript的做法?
我需要能够编写这样的函数:
function printFooSum(foo: Foo) {
console.log(???);
}
并且该函数不应涉及将foo属性手动分配给其他类。
答案 0 :(得分:1)
通过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
,则会在skillListBizzare[skillChoice]
上抛出编译时错误。
答案 1 :(得分:0)
一种方法是:
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));
}
但也许有一种更优雅的方式......
答案 2 :(得分:-1)
我认为你可以这样做:
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);
}