可能在FlowType中有不兼容的别名吗?

时间:2016-07-12 21:22:39

标签: javascript flowtype

我正在考虑像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

尝试这似乎工作得很好。我想知道我是否需要除了类型别名之外的东西。如果我将它包裹在一个物体中,我认为它是可能的,但我不知道。

这样的事情可能吗?

3 个答案:

答案 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}}