我将从我先尝试的方式开始。
我为订购API构建了一个sdk。 order.get
方法返回一个定义类似的命令(为了表示目的而缩小):
interface Order {
ID: string;
Status: string;
FromUser: User;
Address: Address;
xp: any;
}
interface User {
ID: string;
Username: string;
xp: any;
}
interface Address {
ID: string;
City: string;
xp: any;
}
每个对象(订单,用户和地址)都有一个xp字段,API的用户可以在其中提供自己的自定义属性。因此xp的类型为any。这没关系,但我们失去了所有强力打字的好东西。如果用户可以为这些xp值定义模型并在调用方法时传递它们,那将是非常好的。
我认为我可以通过定义这样的方法并为每个xp传入一个类型来使其工作:
public get<T, K, U>(orderID: string): Order<T, K, U> {
// implementation details (return order object)
}
然后我的界面看起来像这样:
interface Order<T = any, K = any, U = any> {
ID: string;
Status: string;
FromUser: User<K>;
Address: Address<U>;
xp: T;
}
interface User<K = any> {
ID: string;
Username: string;
xp: K;
}
interface Address<U = any> {
ID: string;
City: string;
xp: U;
}
几个问题: