如何在常量中使用接口

Posted

技术标签:

【中文标题】如何在常量中使用接口【英文标题】:How to use interface in constant 【发布时间】:2016-09-09 22:05:51 【问题描述】:

我正在尝试在打字稿中创建一个带有子对象的对象。我正在尝试设置一个猫鼬模式,如this question 所示。

如果我将对象和子对象定义为接口,我将无法在可以设置为猫鼬模式的常量中使用它们。

那么有没有办法让我不必输入整个子对象两次,一次在接口中,一次在常量中?

export interface Pizza 
    flavor: String;
    size: String;    


export interface Menu 
    pizza: Pizza


// Doesn't work
export const Menu = 
    store: String,
    menu: Menu  


// Works
export const Menu = 
    store: String,
    menu: 
        pizza: 
            flavor: String,
            size: String
        
      


// What I really want
export const Menu = new mongoose.Schema(
    store: String,
    menu: Menu
);

// What I'm doing right now
export const Menu =  new mongoose.Schema(
    store: String,
    menu: 
        pizza: 
            flavor: String,
            size: String
        
      
);

【问题讨论】:

你的代码中也有Menus。你希望它是一个接口还是一个变量/常量? @NitzanTomer 我只是将它们都放在那里进行比较,说明我想要什么以及我必须使用什么。我想使用接口中的 const 或者实现同样事情的方法。 【参考方案1】:

我没有使用过猫鼬,但据我所见,构造 mongoose.Schema 需要真实的对象,您尝试传递的是仅在编译之前存在的打字稿接口,之后生成的 javascript不包括它们。

也许这就是你要找的东西:

export class Pizza 
    flavor: String;
    size: String;    


export class Menu 
    pizza: Pizza


export const Menu = new mongoose.Schema(
    store: String,
    menu: Menu
);

我只是将您的接口转换为已编译的 javascript 中存在的类。

【讨论】:

就是这样。谢谢!

以上是关于如何在常量中使用接口的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中定义一个常量类?

如何在没有互联网连接、没有 eth0 且没有使用 C 的任何硬编码常量的情况下获取我的外部 IP(主接口)[关闭]

如何将常量与 C# 中的接口相关联?

如何在Java类中定义接口属性并如何使用接口的方法

接口

我可以使用反射更改接口常量(JDK9 +)的值吗?