Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用动态键创建TS接口?_Javascript_Typescript_Dynamic_Interface - Fatal编程技术网

Javascript 如何使用动态键创建TS接口?

Javascript 如何使用动态键创建TS接口?,javascript,typescript,dynamic,interface,Javascript,Typescript,Dynamic,Interface,keyArray=[key1,key2,key3,…]//这是动态值数组。 我想使用keyArray创建如下的TS接口 interface = { key1 : string; key2 : string; key3 : string; ... } 我如何才能做到这一点?很难做到这一点,因为这取决于变量key1等的键入方式 我们可以使用(typeof keyArray)[number]获取keyArray的值的类型,我们可以创建一个类型,将这些类型作为键,将字符串作为值: ty

keyArray=[key1,key2,key3,…]//这是动态值数组。

我想使用keyArray创建如下的TS接口

interface = {
  key1 : string;
  key2 : string;
  key3 : string;
  ...
}

我如何才能做到这一点?

很难做到这一点,因为这取决于变量
key1
等的键入方式

我们可以使用
(typeof keyArray)[number]
获取
keyArray
的值的类型,我们可以创建一个类型,将这些类型作为键,将
字符串作为值:

type FromKeys = Record<(typeof keyArray)[number], string>

不清楚您的意思-类型只在编译时存在,它们被运行时删除(因为JavaScript不是类型化的)。
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", "b", "c"] as const); // Record<"a" | "b" | "c", string>