2016-07-12 16 views
1

Ich denke über etwas wie Haskell nach, wo es einen Fehler bei der Kompilierung gibt, implizit zwischen verschiedenen Typen zu übertragen.Mögliche inkompatible Aliase in FlowType?

Ich möchte in der Lage sein, etwas zu tun:

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 

Der Versuch, dies ganz gut zu funktionieren scheint. Ich frage mich, ob ich vielleicht etwas anderes als einen Typalias brauche. Ich denke, es ist möglich, wenn ich es in ein Objekt verpacke, aber ich weiß es nicht.

Ist so etwas möglich?

Antwort

2

Sie können diese mithilfe von Klassen emulieren:

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; 
} 
+0

Sehr schlau. Ich mag das. –