gpt4 book ai didi

typescript 部分接口(interface)奇怪的行为

转载 作者:行者123 更新时间:2023-12-05 03:19:05 25 4
gpt4 key购买 nike

我在我正在处理的代码库中遇到了一些看起来完全错误的代码。下面是我遇到的一个例子。

interface Car {
make: string
model: string
}

type SomeType = Partial<Car>

const car: SomeType = {}

if (car === "typescript doesn't complain about this") {
// This code will never execute..?
}

我错过了什么吗? car 永远不会等于一个字符串,对吧?通常当你试图比较两个没有重叠的不同类型时,Typescript 会冲你大喊大叫并告诉你它总是返回 false。如有任何帮助,我们将不胜感激!

最佳答案

Partial<Car>weak type因为它的所有属性都是可选的。 TypeScript 2.4 添加了一个检查,如果您尝试分配类似 string 的东西,它会警告您弱类型,因为没有重叠的属性:

let car: { make?: string, model?: string };
car = {}; // okay
car = "oops"; // error! Type '"oops"' has no properties in common with type
// '{ make?: string | undefined; model?: string | undefined; }'.

但在 TypeScript 2.4 之前,car = "oops"本来可以毫无错误地被允许,因为 "oops" 的明显成员都没有(如 lengthtoUpperCase )与 Partial<Car> 冲突. Structurally说到string Partial<Car> .但赋值可能是一个错误,弱类型检测会警告您。


不过,这种弱类型检测似乎只适用于可分配性。正如您所注意到的,它不会启动比较运算符:

if (car === "oops") {  } // no error

microsoft/TypeScript#32627 有一个开放的功能请求要求改变这一点。如果你足够关心它并看到它发生了变化,你可能会去那个问题,给它一个👍,并且可能会给出一个令人信服的案例来说明为什么这对你很重要。但我怀疑它会产生多大影响,而且没有迹象表明这会实现,因为没有社区参与。大概人们在现实世界的代码中不会经常遇到这种情况。


因此,您的问题的答案是:从未为比较运算符实现弱类型检测,并且似乎没有太多对此进行更改的需求。

Playground link to code

关于 typescript 部分接口(interface)奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73530374/

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