gpt4 book ai didi

typescript - 如何根据接口(interface)的键创建模板文字类型?

转载 作者:行者123 更新时间:2023-12-05 05:57:37 25 4
gpt4 key购买 nike

我有这两个接口(interface),代表我的应用程序中的一些数据结构。

interface Foo {
a: number,
b: number,
c: number,
}

interface Bar {
g: number,
h: number,
j: number,
}

为了能够通过它们的字符串名称来识别这些接口(interface)(即当从文件中解析或获取用户输入时),我有以下用于查找的接口(interface):

interface TypeMap {
foo: Foo,
bar: Bar,
}

这允许我创建实用程序类型,例如:

type Lookup<K extends keyof TypeMap> = TypeMap[K];
type FooType = Lookup<'foo'>; // Foo
type FooPropNames = keyof Lookup<'foo'>; // 'a' | 'b' | 'c'

问题从这里开始。 我想为字符串创建一个类型,例如 "foo_a" "bar_j" - 由小写字母组成其中一种类型的名称及其 Prop 名称之一。

type TypePropString<K extends keyof TypeMap> = `${K}_${keyof Lookup<K>}`;

不幸的是,这不起作用,因为接口(interface)可能具有用 symbol 索引的 props,而这些显然不能出现在模板字符串中。

还有其他方法可以实现吗?

最佳答案

你可以试试Exclude symbol来自 keyof Lookup<k> .适用于 4.3.5 Typescript 编译器

type TypePropString<K extends keyof TypeMap> = `${K}_${Exclude<keyof Lookup<K>, symbol>}`;

这使我能够枚举子类型

Image with a code

显然你不能在你的字符串类型中使用符号作为键,但我不确定这是否可以在 template literal types 中完成.

关于typescript - 如何根据接口(interface)的键创建模板文字类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68783058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com