tsconfig.json中启用strict的情况下,为什么tsc在索引类型为never的对象时不会发出错误?

const mystery = ({ foo: 1 } as never)

console.log(mystery['foo'])  // no error
console.log(mystery.foo)  // Property 'foo' does not exist on type 'never'.

export {}

Playground example

推荐答案

It's bug #41021:

'never' (and probably 'void') shouldn't be silently indexable types

DanielRosenwasser于2020年10月10日发表 comments

let x = [1, 2, 3, 4].forEach(x => { console.log(x));
x["hello"] = 123;

预期:x可能为空的错误或其他错误 实际:没有错误


DanielRosenwasser于2020年10月10日发表 comments

事实上,never人似乎也有同样的问题.

打字团队正在积极修复它,但还没有可用的修复程序.

Here's更简单的复制:

declare let mystery: never;

console.log(mystery["foo"]);    // No error
console.log(mystery.foo);       // Property 'foo' does not exist on type 'never'.

Typescript相关问答推荐

Angular 17 -如何使用新的@if语法在对象中使用Deliverc值

如何缩小变量访问的对象属性范围?

创建一个根据布尔参数返回类型的异步函数

如何提取密钥及其对应的属性类型,以供在新类型中使用?

使用axios在ngOnInit中初始化列表

TypeScrip:逐个 case Select 退出noUncheck kedIndexedAccess

打字类型保护递归判断

<;T扩展布尔值>;

垫表页脚角v15

(TypeScript)TypeError:无法读取未定义的属性(正在读取映射)"

有没有办法在Zod中使用跨字段验证来判断其他字段,然后呈现条件

NPM使用Vite Reaction应用程序运行预览有效,但我无法将其部署到Netlify

将布尔值附加到每个对象特性

使用RXJS获取数据的3种不同REST API

基于闭包类型缩小泛型类型脚本函数的范围

有没有一种方法可以提升对象的泛型级别,而对象的值是泛型函数?

如何将元素推入对象中的类型化数组

使用本机 Promise 覆盖 WinJS Promise 作为 Chrome 扩展内容脚本?

在 next.js 13.4 中为react-email-editor使用forwardRef和next/dynamic的正确方法

有没有办法从不同长度的元组的联合中提取带有类型的最后一个元素?