gpt4 book ai didi

typescript - 类型 'Observable' 不可分配给类型 'Observable'

转载 作者:行者123 更新时间:2023-12-01 23:04:02 29 4
gpt4 key购买 nike

我们正在使用 Knockout.js (v3.5.0) 及其 TypeScript 定义。在 TypeScript 4.6.2 之前,它们工作正常。但是,问题似乎比定义文件中的问题“更深”。似乎 TypeScript 在处理 boolean 类型时发生了一些变化。因此,我没有将这个问题标记为 Knockout.js 问题,而是创建了一个受 Knockout d.ts 启发的代码示例来说明问题:

interface Observable<T>
{
(): T;
(value: T): any;
}

function observable<T>(value: T): Observable<T>
{
return undefined as any; // the implementation is not important
}

const x: Observable<boolean> = observable(false);

这段代码有一个编译问题:

Type 'Observable<false>' is not assignable to type 'Observable<boolean>'.
Types of parameters 'value' and 'value' are incompatible.
Type 'boolean' is not assignable to type 'false'.

当然,将 false 转换为 boolean 是可行的,但我确实认为这是 hack,而不是解决方案(显然我们需要对每次出现的 true/false 进行转换) .有什么办法可以真正解决这个问题?

编辑:根据评论,很明显某些类型检查已更改。可以在此处查看更多示例。 Playground Link .

是否有关于此更改的任何信息(以及解释)?

Edit2:按照评论中的建议,我在 https://github.com/microsoft/TypeScript/issues/48150 提交了错误报告

最佳答案

我建议改为显式指定通用类型,例如:

const x = observable<boolean>(false);

这样做的原因是我们假设false 意味着boolean。通常是这样,但并非总是如此。想象一下,例如这些类型

const x = observable<false | undefined>(false);
const y = observable(false);

(对于任何试图以任何其他方式解决打字问题的人,请确保以上几行也有效。)

关于typescript - 类型 'Observable<false>' 不可分配给类型 'Observable<boolean>',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71319489/

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