我有一个存储数据的对象。我有一个UserPrompt
类型,节点和边缘对象(来自Reactflow库)。
我希望UserPrompt
类型的node_id只接受已经存在于我的'nodes'对象中的id。这在TypeScript中可以做到吗?
例如:如果nodes
对象中只有一个id为5的节点,UserPrompt
将不接受id为3的节点。
代码:
'use client';
import { Edge, Node, NodeProps, useEdges, useNodes } from 'reactflow';
import { Button } from './ui/button';
type UserPrompt = {
id: number;
text: string;
node_id: NodeProps['id'];
};
type SessionObject = {
nodes: Node<unknown>[];
edges?: Edge<unknown>[];
prompts?: UserPrompt[];
};
export default function SaveSessionButton() {
//TODO: save nodes, edges, user's prompts!
//TODO: don't save single chat node.
const nodes = useNodes();
const edges = useEdges();
function handleOnClick() {
const obj: SessionObject = {} as SessionObject;
obj['nodes'] = nodes;
obj['edges'] = edges;
console.log(obj);
}
return <Button onClick={handleOnClick}>Save session</Button>;
}
字符串
1条答案
按热度按时间uoifb46i1#
首先,默认情况下,Typescript不能在运行时进行类型检查。这(或某种程度上)可以通过一些第三方库来实现,但这实际上不是您所需要的。
这里你需要的是一个函数,它将验证输入,并允许在输入不正确的情况下继续或抛出错误。有多种选择如何实现它。让我们来看看一个简单的例子,如果node_id是正确的,它会产生正确的对象:
字符串
另外,你不需要把整个session对象传递到那里,而可以只使用节点列表,我在例子中使用它是为了更清楚。
基本上,你也可以在现有的代码中添加
isValid
检查,避免创建单独的函数。然而,有一个专用的方法来验证和对象生成是更方便和方便的,特别是如果有多个放置在你需要UserPrompt
对象的地方。