如何在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
,因为它只是一个类型别名。有没有办法使类型同构,也就是说,一个类型就像另一个类型一样,但是会有一个严格的检查。因此,基本上就像Haskellsnewtype
一样,请看一看(您需要在页面中查找“字符串文字”)。与枚举类似,但不同的是,这强制字符串类型包含特定字符串子集中的一个:
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