我有一个物体
var myObj = [{ id: 'a', value: 1}, { id: 'b', value: 2 }, { id: 'c', value: 3}]
我有一个函数我只想传递id的可能值
function abc(id: 'a' | 'b' | 'c') { /* */ }
我试过这样
var myObj = [{ id: 'a', value: 1}, { id: 'b', value: 2 }, { id: 'c', value: 3}]
type OJ = typeof myObj;
type id = keyof OJ[number]['id'];
但它的ID显示为type id = number | typeof Symbol.iterator | "toString" | "charAt" | "charCodeAt" | "concat" | "indexOf" | "lastIndexOf" | "localeCompare" | "match" | "replace" | "search" | "slice" | ... 30 more ... | "padEnd"
2条答案
按热度按时间t5fffqht1#
如果从
type id = keyof OJ[number]['id'];
中删除keyof
,则错误将得到修复。这将使id
与string
匹配。如果需要更具体的类型,例如,希望id
为"a" | "b" | "c"
,则可以在对象后给予as const
。运动场
oyxsuwqo2#
您的
type id
中不需要keyof
:但是,使用这种方法,
id
的类型将是string
,因为TypeScript认为myObj
是开放式的,您可以在以后向myObj
添加其他元素。要防止出现这种情况,请使用
const
Assert: