我正在考虑像Haskell这样的东西,它在不同类型之间隐式转移是编译时错误。
我希望能够做到这样的事情:
type Username = string;
type Password = string;
function login(username: Username, password: Password): void {
// do some stuff
}
const username: Username = getUsername();
const password: Password = getPassword();
login(password, username); // ideally, should error
尝试这似乎工作得很好。我想知道我是否需要除了类型别名之外的东西。如果我将它包裹在一个物体中,我认为它是可能的,但我不知道。
这样的事情可能吗?
答案 0 :(得分:2)
您可以使用类来模拟它:
declare class Password {}
function passwordFromString(str: string): Password {
return (str: any);
}
function passwordToString(pass: Password): string {
return (pass: any);
}
function checkPassword(pass: Password): boolean {
if (passwordToString(pass) === 'foo') {
return true;
}
return false;
}
答案 1 :(得分:1)
"不透明类型"这就是Hack所说的。关于在Flow中实现它们的一些讨论:https://github.com/facebook/flow/issues/1056#issuecomment-154876614
答案 2 :(得分:0)
不透明类型已在流程中正式实施。在这里查看文档:{{3}}