javascript - 如何强制 TypeScript 允许 null 作为索引类型?

标签 javascript typescript

我在一个大型项目中有一个对象,它使用 null 作为键,并且无法更改,因为它会破坏整个应用程序。

但是,我得到Type null不能用作索引类型。 ts(2538) 到处都是。有没有办法告诉 TypeScript 接受 null 作为对象键,就像接受数字作为键一样?

demo

最佳答案

javascript中的所有键都会转换为字符串或符号。即使分配了非字符串值,键也会转换为字符串。

因此 MyObject[null] 应该变成类似 MyObject['null'] 并且应该按原样工作。您所要做的就是在访问属性时使用 'null'(作为字符串)而不是 null

请注意,还需要进行另一项更改。下面的语句意味着key可以被分配任何string值或值null

const key: string | null = null;

但是MyObject只有三个有效键a,b,null。所以你应该修改你的声明,如:

const key: keyof typeof MyObject  = 'null';

const key  = 'null';

因此,key 只能分配有效的 MyObject 键。

const MyObject = {
    null: 0,
    a: 1,
    b: 2,
}

//const key: keyof typeof MyObject  = 'null';
const key = 'null';

console.log(MyObject[key]);

Playground

关于javascript - 如何强制 TypeScript 允许 null 作为索引类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76583270/

相关文章:

javascript - 用户登录成功后关闭 Activity (WebView)

javascript - `undefined!` 在 typescript 中是什么意思?

typescript - Angular2 Observables——回放

javascript - 当 JavaScript 更改时,Angular 无法通过 [(ngModel)] 获取输入值

javascript - Chrome 桌面通知未取消

javascript - 如果网站试图逃离框架,如何停止加载网站

javascript - 异步/等待的环回支持

Javascript - 我无法在字符串的开头连接

angular - 将数组绑定(bind)到模板中的组件仅在页面加载时起作用

typescript - 说服 TypeScript 编译器过滤后的数组不包含空值