Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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_Type Systems - Fatal编程技术网

如何在TypeScript中实现同构类型

如何在TypeScript中实现同构类型,typescript,type-systems,Typescript,Type Systems,我有一个文件file.ts: let a: Message = "foo" let b: Message = "bar" let c: Message = "baz" 现在我有了第二个文件file2.ts type Message = string function fun(abc: Message): void { } 现在,函数fun将允许我将string传递给它,而不是Message,因为它只是一个类型别名。有没有办法使类型同构,也就是说,一个类型就像另一个类型一样,但是会有一个严格

我有一个文件
file.ts

let a: Message = "foo"
let b: Message = "bar"
let c: Message = "baz"
现在我有了第二个文件
file2.ts

type Message = string

function fun(abc: Message): void { }
现在,函数
fun
将允许我将
string
传递给它,而不是
Message
,因为它只是一个类型别名。有没有办法使类型同构,也就是说,一个类型就像另一个类型一样,但是会有一个严格的检查。因此,基本上就像Haskells
newtype

一样,请看一看(您需要在页面中查找“字符串文字”)。与枚举类似,但不同的是,这强制字符串类型包含特定字符串子集中的一个:

type Message = "foo" | "bar" | "baz";

您可以通过这种方式将消息类型的值限制为一组值

键入Message=“foo”|“bar”|“baz”;
函数问候(消息:消息){
警报(信息);
}
问候(“foo”);//作品
问候(“其他不起作用的东西”);//错误

我想你可以这样做:

让a:Message | string | any=“foo”
您可以这样做(枚举模拟)

然后你可以做:

function fun(abc: Message): void { 
    // you can do stuff here like 
    if (abc === Message.Bar) {
       /// ...
    }
}
fun(Message.Foo)  // ok
fun("bar")  // ok
fun("xyz")  // error
检查此提案:
function fun(abc: Message): void { 
    // you can do stuff here like 
    if (abc === Message.Bar) {
       /// ...
    }
}
fun(Message.Foo)  // ok
fun("bar")  // ok
fun("xyz")  // error