是否可以在Typescript中创建一个接口或类型,将其中一个属性作为同一对象中其他属性的键的子组类型?
例如,我有这样的基本类型:
interface Node {
id: string;
// ...other irrelevant properties
}
interface Connection {
fromNode: string;
toNode: string;
// ...other irrelevant properties.
}
现在我有一个定义为图的接口:
interface Graph {
nodes: Record<string, Node>
connections: Record<string, Connection>
// other irrelevant properties
}
这是一个真实的物体的样本:
const aGrapgh: Graph = {
nodes: {
"nodeA": {id: "nodeA"}
"nodeB": {id: "nodeB"}
}
connections: {
"nodeA": {fromNode: "nodeA", toNode: "nodeB"}
}
}
这里的问题是,nodes
和conections
被键入为一个带有通用string
by键的Record。如果我在connections
上使用nodeC
,是否有机会以TS抱怨的方式键入它,因为它不是nodes
上的现有键?nodeA
这只是一个示例密钥。在真实的代码中,这些Id是在执行时生成的uuid
。
2条答案
按热度按时间rxztt3cl1#
你追求的是字符串文字类型
或
这是相同的,但没有重复。
8oomwypt2#
你可以使整个图通用,一个字符串联合类型的传递来限制可以使用的节点ID。这不仅会限制你的
Record
键,还会限制你的Node
对象的id
属性,以及你的Connection
对象的fromNode
和toNode
属性:Playground链接(重命名为
Node
为GNode
,以防止与内置Node
类型冲突)