Typescript 字符串文字类型脚本中的对象实例

Typescript 字符串文字类型脚本中的对象实例,typescript,types,Typescript,Types,我会经常这样做字符串文字 type stringNumbers = 'One' | 'Two' | 'Three'; enum nums = { One, Two, Three } 并在类构造函数中使用它 class myClass { display: stringNumbers; constructor(display: stringNumbers) { this.display = display; } } 我的问题是当

我会经常这样做字符串文字

type stringNumbers = 'One' | 'Two' | 'Three';
enum nums = {
    One,
    Two,
    Three
}
并在类构造函数中使用它

class myClass {
    display: stringNumbers;
    constructor(display: stringNumbers) {
        this.display = display;
    }
}
我的问题是当我创建一个新类时。我的值是我想要的类型,但我必须输入一个字符串以显示如下内容

let newMyClass = new MyClass('Two');
这对于简单的对象很好,vscode将显示我可以使用的类型,但是没有任何intellisense,当您有更高级的东西时,它会变得非常混乱

我想要的是一个枚举或对象,其属性命名为与字符串文字相同,其值是如下所示的字符串值

type stringNumbers = 'One' | 'Two' | 'Three';
enum nums = {
    One,
    Two,
    Three
}

这样,当我上新课时,我就能做到这一点

let newMyClass = new MyClass(nums.One);

关于如何使这些类声明更好,有什么建议吗?我喜欢字符串文字类型,但它们几乎和在复杂对象上将其设置为字符串类型一样无用。在我的用例中,我想将表单字段绑定到模型上的属性,但这是在一组字段中的其他选项的中间,因此工具提示非常混乱。

如果您想使用枚举,则:

enum nums {
    One,
    Two,
    Three
}

class myClass {
    display: nums;

    constructor(display: nums) {
        this.display = display;
    }
}

new myClass(nums.One);
如果要使用枚举,但希望使用字符串值(名称),而不是序号,则:

class myClass {
    display: string;

    constructor(display: nums) {
        this.display = display[display];
    }
}
如果要使用对象并将键作为字符串传递,请执行以下操作:

let nums = {
    One: 'One',
    Two: 'Two',
    Three: 'Three'
}

type keys = keyof typeof nums;

class myClass {
    display: string;

    constructor(display: keys) {
        this.display = nums[display];
    }
}

new myClass("One");

如果要使用枚举,请执行以下操作:

enum nums {
    One,
    Two,
    Three
}

class myClass {
    display: nums;

    constructor(display: nums) {
        this.display = display;
    }
}

new myClass(nums.One);
如果要使用枚举,但希望使用字符串值(名称),而不是序号,则:

class myClass {
    display: string;

    constructor(display: nums) {
        this.display = display[display];
    }
}
如果要使用对象并将键作为字符串传递,请执行以下操作:

let nums = {
    One: 'One',
    Two: 'Two',
    Three: 'Three'
}

type keys = keyof typeof nums;

class myClass {
    display: string;

    constructor(display: keys) {
        this.display = nums[display];
    }
}

new myClass("One");