是否可以拒绝在打字稿中直接使用javascript属性?

时间:2020-02-17 03:20:18

标签: typescript kendo-ui

我们经常有扩展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方法?这样,初级开发人员就不可能再犯错误而不更新事件而不触发事件,而不得不在setsetNoEmit之间做出有意识的决定?

将变量设为只读可能有效,但最终会误导编译器有关其类型的信息。

0 个答案:

没有答案