typescript - 在打字稿中使用联合返回类型键入递归函数
问题描述
我正在尝试键入一个打字稿函数,该函数将属性添加到任意深度的嵌套数组中的对象。运行时代码在 Javascript 中是微不足道的,但我整天都在努力让 Typescript 类型进行编译。
[{}, {}]
代码应该采用这样或这样[[{},{}]]
或这样的数组[[[{},{}]]]
并将marked:true
属性添加到每个对象;
type Nested<T> = T | Array<Nested<T>>;
function markNested<T>(objOrNestedArray: Nested<T>): T {
if (Array.isArray(objOrNestedArray)) {
return objOrNestedArray.map(markNested);
} else {
return { ...objOrNestedArray, marked: true };
}
}
谢谢你。
解决方案
您只是缺少函数的正确返回类型。它需要Nested<T>
像源数组一样。为了完整起见,我还添加了标记属性,因为这可能对查找有用。
function markNested<T>(objOrNestedArray: Nested<T>): Nested<T & { marked: boolean }> {
/*... */
}
推荐阅读
- docker - 如何使用 docker log 在每次匹配特定字符串后指定日志数?
- node.js - 干净退出 - 重新启动前等待更改?
- vim - 如何在 vim 编辑器中快速按 enter
- paypal - 如何在 PayPal 客人付款上显示“使用借记卡或信用卡付款”按钮而不是“以客人身份结帐”
- android - 如何使用 openweathermap API 获取未来 3 天天气预报的响应
- django - 登录不起作用,并在 /basic_app/user_login/ 处显示 NoReverseMatch,但注册似乎可以正常使用类似的 url 模式和模板标记
- java - 为什么我不能在 try/catch 中输入多个输入?
- c - 尝试分隔我的每条输出线(创建一个翻转三角形)
- c# - WebBrowser.Source.AbsuloteUri 返回null,但我初始化了源
- php - CodeIgniter CSRF 服务器端实现?