如何解决如何使用动态密钥创建 TS 接口?
keyArray = [key1,key2,key3,...] //this is dynamic value array.
我想使用 keyArray 创建如下所示的 TS 接口。
interface = {
key1 : string;
key2 : string;
key3 : string;
...
}
我该怎么做?
解决方法
很难做到这一点,因为这取决于变量 key1
等的类型。
我们可以使用 keyArray
获取 (typeof keyArray)[number]
的值的类型,然后我们可以创建一个以这些类型为键,以 string
为值的类型:
type FromKeys = Record<(typeof keyArray)[number],string>
但键类型是 key1
的 type 等——而不是 value。如果 key1
的类型是字符串文字,这正是您想要的。但是如果 key1
的类型只是 string
,那么您的 FromKeys
类型将允许任何 string
属性并且不会特别有用。
type FromKeys<T extends readonly PropertyKey[]> = Record<T[number],string>
declare function makeObject<T extends readonly PropertyKey[]>(keyArray: T): FromKeys<T>;
const obj1 = makeObject(["a","b","c"]); // Record<string,string>
const obj2 = makeObject(["a","c"] as const); // Record<"a" | "b" | "c",string>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。