首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

是否可以仅使用TypeScript为对象创建对象键路径字符串自动完成?

是的,可以使用TypeScript为对象创建对象键路径字符串的自动完成。在TypeScript中,可以使用索引类型和递归类型来实现这个功能。

首先,我们可以定义一个Path类型,它表示对象的键路径字符串。Path类型是一个字符串,由对象的键名组成,每个键名之间用.分隔。例如,Path类型可以是"foo.bar.baz"

接下来,我们可以定义一个PathBuilder类型,它是一个泛型函数,用于根据对象的类型和键路径字符串创建对象的键路径。PathBuilder函数接受两个参数:对象类型和键路径字符串。它使用递归类型来遍历键路径字符串,并根据每个键名获取对象的类型。最后,它返回一个表示对象的键路径的Path类型。

下面是一个示例代码:

代码语言:txt
复制
type Path<T, K extends string> = K extends `${infer Key}.${infer Rest}`
  ? Key extends keyof T
    ? Rest extends string
      ? Path<T[Key], Rest>
      : never
    : never
  : K extends keyof T
    ? T[K]
    : never;

function pathBuilder<T>() {
  return <K extends string>(key: K) => key;
}

// 示例使用
interface User {
  id: number;
  name: string;
  address: {
    city: string;
    street: string;
  };
}

const userPath = pathBuilder<User>();

const idPath = userPath("id"); // 类型为 "id"
const namePath = userPath("name"); // 类型为 "name"
const cityPath = userPath("address.city"); // 类型为 "address.city"
const streetPath = userPath("address.street"); // 类型为 "address.street"

// 使用示例
const user: User = {
  id: 1,
  name: "John Doe",
  address: {
    city: "New York",
    street: "123 Main St",
  },
};

const id: number = user[idPath]; // 可以获取到 user.id 的值
const name: string = user[namePath]; // 可以获取到 user.name 的值
const city: string = user[cityPath]; // 可以获取到 user.address.city 的值
const street: string = user[streetPath]; // 可以获取到 user.address.street 的值

在上面的示例中,我们定义了一个Path类型,它使用了模板字面量类型和条件类型来实现递归遍历键路径字符串。然后,我们定义了一个pathBuilder函数,它返回一个函数,用于创建对象的键路径。最后,我们使用pathBuilder函数创建了一个userPath函数,用于创建User对象的键路径。

使用这种方法,我们可以在TypeScript中实现对象键路径字符串的自动完成。这对于访问嵌套对象的属性非常有用,可以提高代码的可读性和可维护性。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券