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