gpt4 book ai didi

typescript 编译器错误? knockout.validation.d.ts 不再编译

转载 作者:搜寻专家 更新时间:2023-10-30 20:31:15 25 4
gpt4 key购买 nike

我刚刚将 Typescript 从 v2.3 更新到 v2.4,现在它在 knockout.validation.d.ts 行上给我一个错误:

interface KnockoutSubscribableFunctions<T> {
isValid: KnockoutComputed<boolean>;
isValidating: KnockoutObservable<boolean>;
rules: KnockoutObservableArray<KnockoutValidationRule>;
isModified: KnockoutObservable<boolean>;
error: KnockoutComputed<string>;
setError(error: string): void;
clearError(): void;
}

这里 knockout.validation 试图表明 KnockoutSubscribableFunctions 现在有额外的成员。下面是这个接口(interface)在 knockout.d.ts 中的定义:

interface KnockoutSubscribableFunctions<T> {
[key: string]: KnockoutBindingHandler;

notifySubscribers(valueToWrite?: T, event?: string): void;
}

编译器现在提示:

Property 'isValid' of type 'KnockoutComputed' is not assignable to string index type 'KnockoutBindingHandler'.

我不明白为什么它没有将这些新值视为界面中的新属性?为什么要说他们必须映射到索引签名上? docs似乎表明您可以在同一界面中拥有索引签名和其他属性。

我将接口(interface)的初始定义带入了 playground,它甚至提示 notifySubscribers 不可分配给 KnockoutBindingHandler。

使用新的编译器,您将如何编译这段代码?

现在我正在使用强力方法来编译它,其中我将 knockout.d.ts 定义更改为如下:

interface KnockoutSubscribableFunctions<T> {
[key: string]: any;//KnockoutBindingHandler;

notifySubscribers(valueToWrite?: T, event?: string): void;
}

最佳答案

问题的存在是因为以下类型的差异:

[key: string]: KnockoutBindingHandler;

和其他参数:

isValid: KnockoutComputed<boolean>;
isValidating: KnockoutObservable<boolean>;
rules: KnockoutObservableArray<KnockoutValidationRule>;
isModified: KnockoutObservable<boolean>;
error: KnockoutComputed<string>;
setError(error: string): void;
clearError(): void;

您得到的错误基本上是说:无法将 KnockoutComputed 类型分配给 KnockoutBindingHandler 类型。

可能这个编译时检查在 TS 2.4 中得到了改进,这就是为什么你以前没有遇到过这个问题。

您的解决方案有效:

[key: string]: any;//KnockoutBindingHandler;

如果您可以更改此代码,您可以尝试另一个“更漂亮”的解决方案:

[key: string]: any | KnockoutBindingHandler;

这可能会为您提供一些额外的自动完成帮助。

关于 typescript 编译器错误? knockout.validation.d.ts 不再编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45134071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com