在typescript中,我可以拥有一个由类构造函数确定的枚举类型的类成员,它指示其他成员类型吗? 背景故事(你可以跳过)

在typescript中,我可以拥有一个由类构造函数确定的枚举类型的类成员,它指示其他成员类型吗? 背景故事(你可以跳过),typescript,class,generics,enums,type-safety,Typescript,Class,Generics,Enums,Type Safety,我来自Qt/C++,对typescript和javascript仍然非常陌生。我在Qt/C++中遵循的编程理念可以总结为,将所有东西都编码为API,我正在尝试学习如何在typescript中应用这一点。我不太确定这是否是我需要使用泛型的东西,所以我将详细讨论。如果这是C++,我可能会用模板来做这个。 无论如何,我想创建一个类,作为构建internet民意调查的基础。 基本上这个想法是, 创建一个Poll类的对象let question1=new Poll(水果,“Fav Desert?”) 构造

我来自Qt/C++,对typescript和javascript仍然非常陌生。我在Qt/C++中遵循的编程理念可以总结为,
将所有东西都编码为API
,我正在尝试学习如何在typescript中应用这一点。我不太确定这是否是我需要使用泛型的东西,所以我将详细讨论。如果这是C++,我可能会用模板来做这个。 无论如何,我想创建一个类,作为构建internet民意调查的基础。 基本上这个想法是,

  • 创建一个Poll类的对象
    let question1=new Poll(水果,“Fav Desert?”)
  • 构造函数将任何枚举类型作为参数<代码>枚举水果
    枚举蔬菜
  • 枚举类型表示问题的选项<代码>苹果、橘子、香蕉
  • 然后,枚举类型指示类的工作方式
  • 因此,如果枚举类型有3个成员,则需要3个答案,每个枚举成员一个答案:
  • //我愚蠢的互联网民意调查决定了你是哪种水果
    让问题1=新的民意测验(水果,“最喜欢的甜点?”);
    问题1.添加选项(“香蕉分割”,水果、香蕉);
    问题1.添加选项(“苹果派”,水果,苹果);
    问题1.添加选项(“橙色蛋糕”,水果,橙色);
    让问题2=新的民意测验(水果,“最喜欢的颜色?”);
    问题2.添加选项(“黄色”、水果、香蕉);
    问题2.添加选项(“红色”、水果、苹果);
    问题2.添加选项(“橙色”,水果,橙色);
    
  • 在数据库中,将跟踪每个答案/枚举成员的流行程度,以及总体上选择枚举成员的频率
  • 所以基本上,我希望我的poll类是围绕一个enum类型构建的,在这里进行内部检查以确保类型安全、选项数量、无重复项等

    实际问题 如何创建一个以枚举器类型作为构造函数参数的类,并使用该枚举器类型设置类成员变量的类型? 这是打字安全的吗

    在我看来,它是这样的:

    类轮询
    {
    构造函数(T:enum)//T表示枚举类型
    {
    this.m_T=T;//伪代码。设置内部使用的枚举类型
    }
    私有类型m_T:enum;//伪代码,enum类型
    私有m_选项:m_T[];//伪代码,枚举类型的类型安全数组
    私有m_选项text:string[];//与m_选项对应
    addOption(optionText:string,option:m\u T):void
    {
    此.m_Options.push(选项);
    此.m_optionText.push(optionText);
    }
    }
    罗汉果{
    苹果=0,
    橙色
    香蕉,
    }
    枚举蔬菜{
    胡萝卜=0,
    西兰花,
    生菜,
    }
    让问题1=新的民意测验(水果,“最喜欢的甜点?”);
    //类型安全
    问题1.添加选项(“香蕉分割”,水果。香蕉);//应该有用
    //不是类型安全的,因为问题1不是用蔬菜枚举构造的
    问题1.添加选项(“胡萝卜蛋糕”,蔬菜,胡萝卜);//不应该起作用
    

    谢谢。

    泛型是否希望
    类轮询
    有效?然后用
    newpoll(“最喜欢的甜点”)
    @K48 yes;这很有效。有趣的是,这样一个详细的问题被总结为“只使用泛型”。泛型像
    class Poll
    那样有效吗?然后用
    newpoll(“最喜欢的甜点”)
    @K48 yes;这很有效。有趣的是,这样一个详细的问题被总结为“只需使用一个泛型”。