Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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
如何在Typescript中匹配分发类型_Typescript - Fatal编程技术网

如何在Typescript中匹配分发类型

如何在Typescript中匹配分发类型,typescript,Typescript,我有很多形状联合类型(矩形和圆形),每种形状都有不同的支柱,比如矩形有宽度和高度,而圆形有半径 我有一个应用程序,它接受输入并随机绘制形状。因此: 输入:一个对象,键是形状的名称,值是形状的类型 输出:也是一个对象,键是形状的名称,值是形状的道具 我希望有一个存储可以保存多个形状输入和输出,如下所示: //有效的一个: { 输入:{房子:'矩形',足球:'圆形'}, 输出:{房子:{宽度:30,高度:10},足球:{半径:0.2}, }; //无效的一个: { 输入:{房子:'矩形',足球:

我有很多形状联合类型(矩形和圆形),每种形状都有不同的支柱,比如矩形有宽度和高度,而圆形有半径

我有一个应用程序,它接受输入并随机绘制形状。因此:

  • 输入:一个对象,键是形状的名称,值是形状的类型
  • 输出:也是一个对象,键是形状的名称,值是形状的道具
我希望有一个存储可以保存多个形状输入和输出,如下所示:

//有效的一个:
{
输入:{房子:'矩形',足球:'圆形'},
输出:{房子:{宽度:30,高度:10},足球:{半径:0.2},
};
//无效的一个:
{
输入:{房子:'矩形',足球:'圆形'},
输出:{房子:{半径:10},足球:{半径:0.2},
};
为了实现上述功能,我尝试了几种方法,但到目前为止,我没有找到正确的解决方案,所有方法都没有正确地失败

形状类型
类型矩形={
类型:“矩形”;
道具:{
宽度:数字;
高度:数字;
};
};
类型圆={
类型:“方形”;
道具:{
半径:数字;
};
};
类型形状=矩形|圆形;
第一次尝试
类型Draw1={
输入:{[key:string]:Shape['type']};
输出:{[key:string]:Shape['props']};
};
const Drawhouse 1_1:Draw1={
输入:{house:'Rectangle'},
输出:{house:{宽度:3,高度:4}},
};
const Drawhouse 1_2:Draw1={
输入:{house:'Rectangle'},

输出:{house:{radius:10}},//解决这个问题的一种方法是使用遗传算法,这样语言就知道你说的是哪种类型:

type Draw<T extends Shape> = {
  inputs: { [key: string]: T["type"] };
  outputs: { [key: string]: T["props"] };
};

const drawHouse1_1: Draw<Rectangle> = {
  inputs: { house: "Rectangle" },
  outputs: { house: { width: 3, height: 4 } }
};

const drawHouse1_2: Draw<Rectangle> = {
  inputs: { house: "Rectangle" },
  outputs: { house: { radius: 10 } }
};
类型绘制={
输入:{[key:string]:T[“type”]};
输出:{[key:string]:T[“props”]};
};
const Drawhouse 1_1:绘图={
输入:{house:“矩形”},
输出:{house:{宽度:3,高度:4}}
};
const Drawhouse 1_2:绘图={
输入:{house:“矩形”},
输出:{house:{radius:10}}
};

谢谢,阿里,它工作得很好。一开始我可能把问题复杂化了。