2013-08-01 20 views
26

Jeśli mam właściwość, która może być ciągiem znaków lub wartość logiczną jak mogę określić go:Wiele podpisy typu dla członków, typy Unii w maszynopisie

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

Nie chcę uciekać się do:

interface Foo{ 
    bar:any; 
} 

Nie sądzę, że to możliwe bez any. Możesz odpowiedzieć na którekolwiek z poniższych:

Czy przeoczyłem specyfikację i jej możliwe teraz? Czy jest coś takiego? Czy zarejestrowano żądanie funkcji: http://typescript.codeplex.com/workitem/list/basic? (UPDATE to raport problem można głosować na https://typescript.codeplex.com/workitem/1364)

byłoby sobie wyobrazić coś takiego:

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

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

Nie pewny swojego scenariusza użytkowania ale generycznych pomóc tutaj? – Damian

Odpowiedz

27

ta jest zwykle określany jako „typów Union”. Pozwala na to system typu TypeScript z wersji 1.4.

Patrz: Advanced Types

+3

Jego dozwolone w funkcjach [spróbuj] (http://goo.gl/M4qegd) Wciąż (naiwnie) myślę, że może być dozwolone we właściwościach. Ale odpowiedziałeś na moje pytanie. Btw. Świetnie jest mieć członka zespołu ts na stackoverflow, dzięki za to. PS: moim największym zmartwieniem jest powolna kompilacja, powoli ginę za każdym razem, gdy potrzebuję 5 sekund, aby zobaczyć mój kod w akcji :) – basarat

+5

V1.4 teraz pozwala im –

5

Nie mówiąc to odpowiedzi na swoje pytanie, ale można uciec się do czegoś takiego?

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

+1 na przydatną odpowiedź. Jednak mój scenariusz użycia definiuje interfejsy maszynopisów dla takich rzeczy jak: https://github.com/gruntjs/grunt-contrib-watch#optionsevent Obecnie ja (i inni) uciekamy się do 'any' dla takich przypadków – basarat

52

Począwszy od roku 2015, Unii rodzaje pracy:

interface Foo { 
    bar:string|boolean; 
} 
+2

To powinno być zaakceptowaną odpowiedzią . –