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;
