繁体   English   中英

如何在 Typescript 中引用自己的接口属性?

[英]How to refer to own property of an interface in Typescript?

我试图在界面中引用自己的属性。

让我们考虑这个例子:

type PizzaType = "pepperoni" | "margherita" | "cheese";

interface Pizza {
    bakeTime: number;
    size: number;
}

interface PizzaService {
    availablePizzaTypes: Record<PizzaType, Pizza>;
    calculatePrice: (type: PizzaType) => number;
}

看看PizzaService.calculatePrice 我们知道类型必须是PizzaType 这很好用。

但是让我们想象一下,我们不知道PizzaType ,我们只想参考availablePizzaTypes 是这样的:

interface AnonymousPizzaService {
    availablePizzaTypes: Record<string, Pizza>;
    calculatePrice: (type: << How to refer to `availablePizzaTypes`? >>) => number;
}

我想使用类似type: (keyof availablePizzaTypes)的东西,但这不起作用。

那么我如何在 Typescript 中做类似的事情呢?

编辑这是一个更简单的例子:

interface Pizza {
    name: string;
    // When `name` is e.g "pepperoni", names can only be "['pepperoni']".
    names: this["name"][];
}

您将需要AnonymousPizzaService的类型参数来捕获支持的实际比萨饼类型:

type PizzaType = "pepperoni" | "margherita" | "cheese";
interface AnonymousPizzaService<T extends PizzaType> {
    availablePizzaTypes: Record<T, Pizza>;
    calculatePrice: (type: T) => number;
}

游乐场链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM