如何实现TypeScript中索引类型的递归定义并去除可选修饰符?

更新于
2026-09-24 19:08:02
3阅读来源:SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1652个文字,预计阅读时间需要7分钟。

如何实现TypeScript中索引类型的递归定义并去除可选修饰符?

目录前言总结前言这两天遇到了一个TS的问题,跑来问问大家。问题问题是这样的:有一个interface,想取出userInfo的类型来:typescriptinterface Result { data?: { userInfo?: { name: string; }; };}他是这样取的:

目录
  • 前言
  • 总结

前言

这两天东东遇到一个 TS 的问题,跑来问我。

问题是这样的:

这样一个 interface,想取出 userInfo 的类型来:

interface Result{ data?: { userInfo?: { name: string; } } }

他是这样取的:

type userInfo = Result['data']['userInfo'];

但是会报错:

说是 userInfo 不在这个联合类型上。

这很正常,因为可选索引的含义就是值和 undefined 的联合类型 value | undefined。

于是他问我应该怎么取?

我和他说这个问题有两种不同复杂度的解决方案,有简单的有复杂的,问他想听哪个。

阅读全文

本文共计1652个文字,预计阅读时间需要7分钟。

如何实现TypeScript中索引类型的递归定义并去除可选修饰符?

目录前言总结前言这两天遇到了一个TS的问题,跑来问问大家。问题问题是这样的:有一个interface,想取出userInfo的类型来:typescriptinterface Result { data?: { userInfo?: { name: string; }; };}他是这样取的:

目录
  • 前言
  • 总结

前言

这两天东东遇到一个 TS 的问题,跑来问我。

问题是这样的:

这样一个 interface,想取出 userInfo 的类型来:

interface Result{ data?: { userInfo?: { name: string; } } }

他是这样取的:

type userInfo = Result['data']['userInfo'];

但是会报错:

说是 userInfo 不在这个联合类型上。

这很正常,因为可选索引的含义就是值和 undefined 的联合类型 value | undefined。

于是他问我应该怎么取?

我和他说这个问题有两种不同复杂度的解决方案,有简单的有复杂的,问他想听哪个。

阅读全文