【发布时间】:2021-02-24 01:02:12
【问题描述】:
我不确定在打字稿项目中为函数创建输入/输出中任何类型的函数是否好,以及如何在“严格类型检查”和“灵活性”之间取得平衡。
现在我正在尝试创建一个辅助函数来删除 graphQL 响应中的边和节点,以便在视图组件中更轻松地处理,举个例子:
// Input A
{
"students": {
"edges": [
{
"node": {
"name": "Peter",
"age": 12
}
},
{
"node": {
"name": "Mike",
"age": 12
}
}
]
}
}
// Input B
{
"teachers": {
"edges": [
{
"node": {
"name": "Mary",
"age": 40
}
},
{
"node": {
"name": "John",
"age": 35
}
}
]
}
}
我建议的辅助函数:
const simpleConnectionsHandler = (obj: any): any => {
// Some logic to remove edges and nodes
...
}
期待我能从函数中得到什么(输出):
// Output A
{
"students": [
{ "name": "Peter", "age": 12 },
{ "name": "Mike", "age": 12 }
]
}
// Output B
{
"teachers": [
{ "name": "Mary", "age": 40 },
{ "name": "John", "age": 35 }
]
}
在我的视图组件中,我将采用这样的简化版响应:
const studentList: studentsSimplified = simpleConnectionsHandler(inputA);
const teacherList: teachersSimplified = simpleConnectionsHandler(inputB);
我这样做的原因是,我想防止为响应json声明两种版本的类型,一种是带有边和节点的响应,一种是没有边和节点的响应。
我想知道接受输入为“any”并返回“any”作为输出是否好,当我在调用方返回结果时,我转换回响应的简化版本。
【问题讨论】:
-
听起来像是一个设计决定。对我来说,“simpleConnectionsHandler”似乎表明它正在发出请求。但是,实际功能似乎是从图形结构中解开对象。首先要做的是了解您要分离和封装的责任。如果它是一个概念上一致的操作,恰好有多个返回类型,那么你可以使用一个通用的typescriptlang.org/docs/handbook/generics.html
-
感谢@farlee2121,在示例中它假设函数的输入/输出属于同一类型。在我的情况下,输入和输出应该是两种不同的类型,如何在不使用
any的情况下解决它 -
这更像是一个
typescript的问题,而不是reactjs。如果标记正确,打字稿人更有可能回答
标签: typescript apollo