繁体   English   中英

如何在 TypeScript 中键入普通 object

[英]How to type plain object in TypeScript

我想输入 JavaScript 的普通 object,然后写下:

interface PlainObject {
  [k: string]: any;
}

但我发现:

type A = keyof PlainObject // string | number

interface PlainArray {
  [k: number]: any;
}

type B = keyof PlainArray // number

问题一:为什么会这样? 问题 2:我怎样才能输入一个普通的 object 像{ name: 'timi' }

这种行为是设计使然, string索引意味着 object 可以通过stringnumber进行索引。 文档说得最好:

如果您有一个带有字符串索引签名的类型, keyof T将是string | number string | number (不仅仅是字符串,因为在 JavaScript 中,您可以使用字符串(object['42'])或数字(object[42])来访问 object 属性)。 而 T[string] 只是索引签名的类型。

没有办法让keyof只返回string的类型。 (有--keyofStringsOnly编译器选项,但主要是为了向后兼容,不应在新代码上启用)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM