你能告诉我为什么下面的代码不会导致错误吗?

Playground Link

type NumberType = {
  field?: { id: string; numberOrString?: number }
};
type StringType = Omit<NumberType, "field"> & {
  field?: { id: string } & { numberOrString?: string }
};

const test = (s: StringType) => {
  // `numberOrString?: number` can be assigned to `numberOrString?: string`
  const n: NumberType = s; // no error
};

推荐答案

这是TypeScript中的一个已知错误,请参阅microsoft/TypeScript#19927.

Omit<NumberType, "field">类型的计算结果相当于{[K in never]: ...},显然,这never个键控映射类型和其他具有可选属性的对象类型的交点没有正确判断.这个bug已经打开很长时间了,所以不清楚何时甚至是否会被修复;大概人们不会经常碰到它吧?如果你很关心这个问题,你可能会想???? 或者描述您的实际用例,但我不知道它是否会有任何影响.

Typescript相关问答推荐

具有条件通用props 的react 类型脚本组件错误地推断类型

实现忽略了JSSOM中的doctor.body.innerHTML集

使用前的组件渲染状态更新

有没有可能使用redux工具包的中间件同时监听状态的变化和操作

我用相同的Redux—Toolkit查询同时呈现两个不同的组件,但使用不同的参数

根据另一个属性的值来推断属性的类型

如何使用一个字段输入对象,其中每个键只能是数组中对象的id属性,而数组是另一个字段?

如何在TypeScript中将一个元组映射(转换)到另一个元组?

如何将泛型对象作为返回类型添加到类型脚本中

如何 bootstrap TS编译器为类型化属性`T`推断正确的类型?

重载函数的T helper参数

从子类集合实例化类,同时保持对Typescript中静态成员的访问

如何将对象数组中的键映射到另一种对象类型的键?

API文件夹内的工作员getAuth()帮助器返回:{UserID:空}

如何创建由空格连接的多个字符串的类型

类型脚本-处理值或返回值的函数

如何创建一个将嵌套类属性的点表示法生成为字符串文字的类型?

映射类型不是数组类型

在Vite中将SVG导入为ReactComponent-不明确的间接导出:ReactComponent

React Context TypeScript错误:属性';firstName';在类型';iCards|iSearch';