打字稿枚举默认值
我刚开始用Aurelia框架学习Typescript。我已经在Aurelia的Todo应用中实现了Matthew Davis的博客TypeScript Enums中的Aurelia模板使用ViewEngineHooks http://davismj.me/blog/template-constants/。打字稿枚举默认值
我希望将默认枚举值设置为列表中的第二个值,并将默认值设置为列表中的第一个值。
另外我想请想知道,如果{藤,优先级}或{只是}的Todo需要进口,如待办事项,list.ts显示
todo.ts
// Pro Tip: By starting our enum at 1, we ensure that all values in the enum are truthy.
export enum Priority {
High = 1,
Medium,
Low
}
export class Todo {
@observable done;
//*** Setting priority: Priority = 2 OR priority: Priority = Priority.Medium - Does not change the default from High/1 ***
//constructor(public list: TodoList, public description: string, public priority: Priority = 2, public editing: boolean = false) {
constructor(public list: TodoList, public description: string, public priority: Priority = Priority.Medium, public editing: boolean = false) {
this.list = list;
this.description = description;
//*** Setting this.priority = 2 OR this.priority = Priority.Medium - Does not change the default from High/1 ;
//this.priority = 2;
this.priority = Priority.Medium;
this.editing = false;
}
待办事项列表.TS
//*** Is {Todo} OR {Todo, Priority} needed for importing? ***
//import {Todo} from './todo';
import {Todo, Priority} from './todo';
...
add(description) {
if (description) {
//*** Setting (this, description, 2) OR (this, description, Priority.Medium) - Does not change the default from High/1 ***
//this.todos.push(new Todo(this, description, 2));
this.todos.push(new Todo(this, description, Priority.Medium));
this.invalidateView();
}
}
todo.html
<select id="priority" value.bind="type">
<option value.bind="Priority[type]" repeat.for="type of Prioritys">${type}</option>
</select>
据我所知当声明一个变量时,你不能设置一个枚举的默认值,与数字或布尔值相同的方式没有默认值。 但是,您可以像构造函数(priority: Priority = Priority.Medium
)中那样为函数参数定义默认值,以便在调用构造函数时不必提供该参数。
两个附加说明: 是不是应该是this.priority = priority; this.editing = editing;
而不是this.priority = Priority.Medium; this.editing = false;
?其次,如果您将public
放在参数前面,则会自动添加并分配类属性,因此您不需要构造函数的附加行。但是对于更复杂的类,我可能会手动创建和分配属性。
关于第二个问题:只要引用该枚举,就需要导入Priority
,例如在编写Priority.Medium
时。当您比较例如Priority
类型的两个不同属性而不使用枚举的名称(例如this.todos[0].priority === this.todos[1].priority
)时,不必导入它。
上<option>
小号
之所以没有使用model.bind
正在改变这是因为正确的价值还没有被“分配”到<option>
。为此,您需要使用model
属性。
<select id="priority" value.bind="type">
<option model.bind="Priority[type]" repeat.for="type of Priorities">
${type}
</option>
</select>
在我的博客中有一个错字,感谢您帮我找到它 –