我们经常有扩展kendo.data.ObservableObject的对象。
可以定义/覆盖“ get”和“ set”以具有更严格的类型,从而确保在使用set或get之前,键存在于属性上(因此获取有关所返回内容的类型信息)。
get<T extends ObservableObject, K extends keyof T>(this: T, name: K): T[K];
set<T extends ObservableObject, K extends keyof T>(this: T, name: K, value: T[K]): void;
但是,如果任何东西依赖于get / set的动态性质,则将导致错误,取决于上下文,是好是坏。
set将导致剑道发出一个事件,以更新可观察对象的所有订阅者。
但是,人们习惯于使用
直接设置它们class X extends ObservableObject { s:string = "";}
X.s = "set a string";
(据我所知)有意不发出事件。
但是,使用直接后备变量是一个很难打破的习惯。
是否可以使用Typescript创建无法直接设置值的类型/类?而是依靠setNoEmit
方法?这样,初级开发人员就不可能再犯错误而不更新事件而不触发事件,而不得不在set
和setNoEmit
之间做出有意识的决定?
将变量设为只读可能有效,但最终会误导编译器有关其类型的信息。