属性 'isvalid' 在类型 'KnockoutObservable' 上不存在
property 'isvalid' does not exist on type 'KnockoutObservable'
我刚开始从 javascript 切换到 typescipt。我正在使用淘汰赛,因为它必须提供明显的优势。
我需要定义一个 knockout computed observable,它依赖于另一个 knockout observable 的值。 Return 如果 observable 有效则为真,否则 return 为假。
这就是我构建代码的方式 -
class anyClass {
private address: KnockoutObservable<any> = ko.observable().extend({ required : true});
private canPrintAddresses : KnockoutComputed<boolean> = ko.computed((): any => {
if (this.address.isValid()) {
return true;
}
else
return false;
});
}
我什至试图在构造函数中定义计算,但编译器无动于衷。我不知道我哪里出错了,但编译器一直报错 - "property 'isValid' does not exist on type 'KnockoutObservable'".
因为我也在使用 durandal,所以我尝试在 activate 事件处理程序中定义它,但这需要在没有值附加到 observable 时在页面激活时进行评估。
请帮忙。
"address"是一个可观察变量。它存储一个对象。你应该使用
if (this.address().isValid()) {
或
if (ko.unwrap(this.address).isValid()) {
为了访问存储对象的属性。
当然如果你想从一个observable中获取值,你应该把值放在observable之前,例如:
this.address({ isValid: ko.observable(true) });
编译器是正确的。在knockout中,属性 'isValid'确实不存在于KnockoutObservable上。
让我们看一下带有 knockout 的 knockout.d.ts 文件:
interface KnockoutObservable<T> extends KnockoutSubscribable<T>, KnockoutObservableFunctions<T> {
(): T;
(value: T): void;
peek(): T;
valueHasMutated?: { (): void; };
valueWillMutate?: { (): void; };
extend(requestedExtenders: { [key: string]: any; }): KnockoutObservable<T>;
}
interface KnockoutSubscribable<T> extends KnockoutSubscribableFunctions<T> {
subscribe(callback: (newValue: T) => void, target?: any, event?: string): KnockoutSubscription;
subscribe<TEvent>(callback: (newValue: TEvent) => void, target: any, event: string): KnockoutSubscription;
extend(requestedExtenders: { [key: string]: any; }): KnockoutSubscribable<T>;
getSubscriptionsCount(): number;
}
interface KnockoutSubscribableFunctions<T> {
notifySubscribers(valueToWrite?: T, event?: string): void;
}
注意,没有"isValid"。
所以问题是:是什么让您认为 isValid 应该是可观察对象的有效成员?如果我不得不猜测,我猜你正在使用 knockout-validation 库,它为 knockout 添加了额外的表单验证功能。如果我猜对了,那么我也猜想您没有为该库引入类型定义文件。该库扩展了 KnockoutSubscribableFunctions<T>
接口以包含更多功能,包括 isValid()
.
interface KnockoutSubscribableFunctions<T> {
isValid: KnockoutComputed<boolean>;
isValidating: KnockoutObservable<boolean>;
rules: KnockoutObservableArray<KnockoutValidationRule>;
isModified: KnockoutObservable<boolean>;
error: KnockoutComputed<string>;
setError(error: string): void;
clearError(): void;
}
一旦包含了这些类型定义,就可以开始了。它们在明确类型的存储库中可用:
我刚开始从 javascript 切换到 typescipt。我正在使用淘汰赛,因为它必须提供明显的优势。
我需要定义一个 knockout computed observable,它依赖于另一个 knockout observable 的值。 Return 如果 observable 有效则为真,否则 return 为假。
这就是我构建代码的方式 -
class anyClass {
private address: KnockoutObservable<any> = ko.observable().extend({ required : true});
private canPrintAddresses : KnockoutComputed<boolean> = ko.computed((): any => {
if (this.address.isValid()) {
return true;
}
else
return false;
});
}
我什至试图在构造函数中定义计算,但编译器无动于衷。我不知道我哪里出错了,但编译器一直报错 - "property 'isValid' does not exist on type 'KnockoutObservable'".
因为我也在使用 durandal,所以我尝试在 activate 事件处理程序中定义它,但这需要在没有值附加到 observable 时在页面激活时进行评估。
请帮忙。
"address"是一个可观察变量。它存储一个对象。你应该使用
if (this.address().isValid()) {
或
if (ko.unwrap(this.address).isValid()) {
为了访问存储对象的属性。
当然如果你想从一个observable中获取值,你应该把值放在observable之前,例如:
this.address({ isValid: ko.observable(true) });
编译器是正确的。在knockout中,属性 'isValid'确实不存在于KnockoutObservable上。
让我们看一下带有 knockout 的 knockout.d.ts 文件:
interface KnockoutObservable<T> extends KnockoutSubscribable<T>, KnockoutObservableFunctions<T> {
(): T;
(value: T): void;
peek(): T;
valueHasMutated?: { (): void; };
valueWillMutate?: { (): void; };
extend(requestedExtenders: { [key: string]: any; }): KnockoutObservable<T>;
}
interface KnockoutSubscribable<T> extends KnockoutSubscribableFunctions<T> {
subscribe(callback: (newValue: T) => void, target?: any, event?: string): KnockoutSubscription;
subscribe<TEvent>(callback: (newValue: TEvent) => void, target: any, event: string): KnockoutSubscription;
extend(requestedExtenders: { [key: string]: any; }): KnockoutSubscribable<T>;
getSubscriptionsCount(): number;
}
interface KnockoutSubscribableFunctions<T> {
notifySubscribers(valueToWrite?: T, event?: string): void;
}
注意,没有"isValid"。
所以问题是:是什么让您认为 isValid 应该是可观察对象的有效成员?如果我不得不猜测,我猜你正在使用 knockout-validation 库,它为 knockout 添加了额外的表单验证功能。如果我猜对了,那么我也猜想您没有为该库引入类型定义文件。该库扩展了 KnockoutSubscribableFunctions<T>
接口以包含更多功能,包括 isValid()
.
interface KnockoutSubscribableFunctions<T> {
isValid: KnockoutComputed<boolean>;
isValidating: KnockoutObservable<boolean>;
rules: KnockoutObservableArray<KnockoutValidationRule>;
isModified: KnockoutObservable<boolean>;
error: KnockoutComputed<string>;
setError(error: string): void;
clearError(): void;
}
一旦包含了这些类型定义,就可以开始了。它们在明确类型的存储库中可用: