字符串文字Typescript中的对象实例

时间:2017-03-03 21:02:54

标签: typescript types

我经常会像这样写一个字符串文字

type stringNumbers = 'One' | 'Two' | 'Three';

并在类构造函数中使用它

class myClass {
    display: stringNumbers;
    constructor(display: stringNumbers) {
        this.display = display;
    }
}

我的问题是当我创建一个新类时。我的价值是我想要的类型,但我必须输入一个字符串以便显示这样的内容。

let newMyClass = new MyClass('Two');

这对于简单的对象来说很好,vscode会显示我可以使用的类型,但是没有任何intellisense,当你有更高级的东西时会变得非常混乱。

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

enum nums = {
    One,
    Two,
    Three
}

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

当我创建一个新课时,我可以这样做

let newMyClass = new MyClass(nums.One);

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

1 个答案:

答案 0 :(得分:2)

如果你想使用枚举,那么:

cluster='<cluster-id>'
service='<service-id>'
project='<project-name>'
elb='<ELB-id>'

version=$(git rev-parse --short=12 HEAD)

sed "s#{image}#${repo}:app-${version}#g" ./docker-compose.yml | sed "s#{frontend}#${repo}:frontend-${version}#g" | sed "s#{logger}#${repo}:logger-${version}#g"> /tmp/docker-compose.yml
ecs-cli compose --file /tmp/docker-compose.yml --project-name ${project} create

taskDefinition=$(aws ecs list-task-definitions --family-prefix "ecscompose-${project}" --output text --sort DESC | awk '{print $2}' | head -n 1)

if [[ $(aws ecs list-services --cluster "${cluster}" --output text) =~ ${service} ]]; then
    aws ecs update-service --cluster "${cluster}"  --service ${service} --task-definition "$taskDefinition" >> /dev/null
else
    aws ecs create-service --cluster "${cluster}" --service ${service} --task-definition "$taskDefinition" --load-balancers loadBalancerName=${elb},containerName=nginx,containerPort=80 --desired-count 5 --role arn:aws:iam::395910257915:role/ecsServiceRole
fi

如果你想使用enum但想要拥有字符串值(name)而不是序数那么:

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];
    }
}