Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.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 将JS字符串数组转换为与IO-TS的并集_Javascript_Typescript_Fp Ts - Fatal编程技术网

Javascript 将JS字符串数组转换为与IO-TS的并集

Javascript 将JS字符串数组转换为与IO-TS的并集,javascript,typescript,fp-ts,Javascript,Typescript,Fp Ts,我正在使用,我想知道是否有办法将字符串数组(文本)转换为此类文本的并集。例如: 导出常量控件=[ “节”, “文本”, “richtext”, “数字”, ]; export const ControlType=t.union( //怎么办?这可能吗?这是我想到的,但显然是错的。 //控件类型.map((类型:string)=>t.literal(类型)) ); 我不知道这是否可行,但考虑到iots只是JS函数,我不明白为什么不可以。我只是不知道怎么做 这种情况下的最终结果应该是(带io ts

我正在使用,我想知道是否有办法将字符串数组(文本)转换为此类文本的并集。例如:

导出常量控件=[
“节”,
“文本”,
“richtext”,
“数字”,
];
export const ControlType=t.union(
//怎么办?这可能吗?这是我想到的,但显然是错的。
//控件类型.map((类型:string)=>t.literal(类型))
);
我不知道这是否可行,但考虑到
iots
只是JS函数,我不明白为什么不可以。我只是不知道怎么做

这种情况下的最终结果应该是(带io ts):


io ts正式建议使用
keyof
,以提高字符串文字联合的性能。谢天谢地,这也使这个问题更容易解决:

export const CONTROLS = [
    "section",
    "text",
    "richtext",
    "number",
] as const;

function keyObject<T extends readonly string[]>(arr: T): { [K in T[number]]: null } {
    return Object.fromEntries(arr.map(v => [v, null])) as any
}

const ControlType = t.keyof(keyObject(CONTROLS))
导出常量控件=[
“节”,
“文本”,
“richtext”,
“数字”,
]作为常量;
函数keyObject(arr:T):{[K in T[number]]:null}{
返回Object.fromEntries(arr.map(v=>[v,null]),如有
}
const ControlType=t.keyof(键对象(控件))

union这个词是什么意思?应该更明确一些,更新了问题@dandavisi don do ts,但看起来可能是
t.union(…CONTROLS.map(t.literal)),只要t.literal只需要一个参数,否则您只需要一个映射包装器来调用一个参数。
export const CONTROLS = [
    "section",
    "text",
    "richtext",
    "number",
] as const;

function keyObject<T extends readonly string[]>(arr: T): { [K in T[number]]: null } {
    return Object.fromEntries(arr.map(v => [v, null])) as any
}

const ControlType = t.keyof(keyObject(CONTROLS))