如何使用泛型返回一个类型,该类型的子属性是传入的类型?

时间:2018-04-16 01:48:40

标签: typescript

我将从我先尝试的方式开始。

我为订购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;
}

几个问题:

  • 这会有用吗?我正确使用通用默认值吗?目标是用户可以只传入他们想要的xp模型,甚至根本不传递。
  • 如果这样可行,用户必须在他们想要调用order.get时必须传递三种不同类型,这将返回一个完全定义良好的类型。是否有另一种方式,他们可以通过一个单一的模型,其中包含OrderXP,UserXp和AddressXP的定义,它们以某种方式分支到各自的领域

0 个答案:

没有答案