Flera typsignaturer för medlemmar, Unionstyper i TypeScript


Om jag har en egenskap som kan vara en sträng eller en boolean, hur definierar jag den:

interface Foo{
    bar:string;
    bar:boolean;
}

Jag vill inte ta till:

interface Foo{
    bar:any;
}

Jag tror inte att det är möjligt utan any. Du kan svara på vilken som helst av dessa:

Har jag missat en specifikation och dess möjliga just nu? Är något liknande planerat? Har en funktion begäran registrerats?

Jag skulle föreställa mig något sådant här:

interface Foo{
    bar:string;
    bar:boolean;
    bar:any; 
}

var x:Foo = <any>{};
x.bar="asdf";
x.bar.toUpperCase(); // intellisence only for string 

Svar #1

Från och med 2015 fungerar unionstyper:

interface Foo {
    bar:string|boolean;
}

Svar #2

Detta kallas vanligtvis för "unionstyper". TypeScript-typ systemet från 1.4 tillåter detta.

Se: Avancerade typer

Svar #3

Jag säger inte att detta svarar på din fråga, men skulle du kunna ta till något liknande detta?

interface Foo<T>{
    bar:T;
}

function createFoo<T>(bar:T) : Foo<T>{
    return {bar:bar};
}

var sFoo = createFoo("s");
var len = sFoo.bar.length;

var bFoo = createFoo(true);
var result = bFoo.bar === true;

Relaterade artiklar