我有以下界面:
interface Ixy
{
X: string;
Y: string;
}
interface Ixz
{
X: string;
Z: string;
}
此功能:
export function update(json: Ixy) {
var a = json.X;
}
从以下两个地方调用该函数:
export function update1(json: Ixy) {
update(json);
}
export function update2(json: Ixz) {
update(json);
}
有人可以向我解释我使用打字稿进行此工作的最佳方式。对 现在update1没问题,但update2显示签名不匹配。是唯一的 我可以解决这个问题,将json的类型改为any,或者有更好的方法 这样做?
答案 0 :(得分:1)
有几种方法可以做到这一点。可能最好的方法是创建一个具有公共属性Ixx
的基础接口X
,然后将其扩展为创建Ixy
和Ixz
,然后实现update
Ixx
作为参数类型:
interface Ixx
{
X: string;
}
interface Ixy extends Ixx
{
Y: string;
}
interface Ixz extends Ixx
{
Z: string;
}
export function update(json: Ixx) {
var a = json.X;
}
export function update1(json: Ixy) {
update(json);
}
export function update2(json: Ixz) {
update(json);
}
这是有效的,因为Ixy
和Ixz
都延伸Ixx
,因此会满足条件json is Ixx
。这适用于扩展基类的类(或扩展基接口的类)。
目前还没有很多关于TypeScript的文献,所以也许对其他语言的接口进行一些一般性的介绍会很有用,因为这实际上是一个关于界面使用的跨语言问题,而不是特定于TS的任何东西。 / p>
Java接口:http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html
C#接口:http://www.codeproject.com/Articles/18743/Interfaces-in-C-For-Beginners