【发布时间】:2021-10-27 04:12:46
【问题描述】:
使用 TypeScript 键入对象时遇到问题
我声明了一个应用程序的某些文件使用的类型:
type Category = "cat1"|"cat2"|"cat3"|"cat4"
我使用Category 输入一个对象,一切正常使用:
const obj: {
[key in Category]: string
} = {---}
但是现在,我想在对象上添加 2 个不是 Category 值的键。
我认为通过键入这样的对象会很容易:
const obj: {
customKey1: string
customKey2: string
[key in Category]: string
} = {---}
但 TS 未按预期工作,而是发送 3 个错误:TS2464、TS1170 和 TS2693
A computed property name must be of type 'string', 'number', 'symbol' or 'any'. ts(2464)
'Category' only refers to a type, but is using as a value here. ts(2693)
A computed property name in a type template must refer to an expression whose type is a literal type or a 'unique symbol' type. ts(1170)
好吧...为什么?
由于Category 是通过文件共享的,我不想通过添加这些仅在此处需要的自定义键来编辑它。
我解决了这个问题,所以如果其他人面临这个问题,我会在下面给出一个解决方案,但是有人知道为什么我的第一个想法不能应用吗?
我不明白为什么单独写[key in Category]: string 有效,但如果添加另一个键则会抛出错误。
【问题讨论】:
标签: typescript