Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.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,在我的typescript程序中,我有两个坐标系,它们可以相互转换。它们都是x,y,但它们的刻度不同。我想设置typescript,以便在我将错误的类型传递给函数时发出警告 type Vec2=[number,number];//基类型 接口TileC扩展了Vec2{};//这两种类型我想是唯一的 接口ChunkC扩展了Vec2{};//这两种类型我想是唯一的 //示例函数 让chunkSize=32; 函数tiletockunk(t:TileC):ChunkC{ 常数[x,y]=t; 常数c:

在我的typescript程序中,我有两个坐标系,它们可以相互转换。它们都是x,y,但它们的刻度不同。我想设置typescript,以便在我将错误的类型传递给函数时发出警告

type Vec2=[number,number];//基类型
接口TileC扩展了Vec2{};//这两种类型我想是唯一的
接口ChunkC扩展了Vec2{};//这两种类型我想是唯一的
//示例函数
让chunkSize=32;
函数tiletockunk(t:TileC):ChunkC{
常数[x,y]=t;
常数c:Vec2=[Math.floor(x/chunkSize),Math.floor(y/chunkSize)];
返回c;
}
函数chunktofile(c:ChunkC):TileC{
常数[cx,cy]=c;
返回[cx*chunkSize,cy*chunkSize];
}
我希望以下是一个错误

let chunkCoord:ChunkC=tileToChunk([7,14]);
设wantError=tileToChunk(chunkCoord);

就目前情况而言,这一切都很好。是否缺少编译器选项?

您没有缺少编译器选项,这是出于设计。TypeScript编译为JavaScript,因此在运行时没有可用的静态类型信息

TypeScript使用结构类型:

TypeScript的结构类型系统的基本规则是,如果y至少具有与x相同的成员,那么x与y是兼容的

好消息是,您可以使用来实现所需的行为,例如通过添加
kind
属性:

接口TileC{
x:数字;
y:数字;
种类:“瓷砖”
}
接口ChunkC{
x:数字;
y:数字;
种类:“块”
}
接口VecC=TileC | ChunkC

在进一步研究之后。我可以通过这样做来实现我想要的。 请注意,
\u type\u lock
可以是任何名称,只要两个(所有)相似类型的名称相同<代码>“foo”和
“bar”
可以是任何东西,只要它们是唯一的。在这里,类型的名称可能是一个不错的选择

type Vec2 = [number,number]; // the base type

interface TileC extends Vec2 {
  _type_lock?: "foo";
};
interface ChunkC extends Vec2 {
  _type_lock?: "bar";
};

这回答了你的问题吗?我知道没有运行时类型信息。我只希望编译时出现警告或错误。你的建议很有帮助,谢谢