2013-08-01 12 views
26

Se ho una proprietà che potrebbe essere una stringa o un valore booleano come faccio a definirlo:firme multiple tipo per i membri, i tipi unione a macchina

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

Non voglio ricorrere a:

interface Foo{ 
    bar:any; 
} 

non credo che la sua possibile senza any. Puoi rispondere a uno di questi:

Ho trascurato una specifica ed è possibile in questo momento? È previsto qualcosa del genere? È stata registrata una richiesta di funzionalità: http://typescript.codeplex.com/workitem/list/basic? (AGGIORNAMENTO questo è il rapporto problema si può votare https://typescript.codeplex.com/workitem/1364)

mi immagino qualcosa di simile:

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

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

Non sono sicuro del vostro scenario di utilizzo, ma sarebbero generici aiutare qui? – Damian

risposta

27

questo è di solito indicato come "tipi di unione". Il sistema di tipo TypeScript dalla versione 1.4 consente questo.

Vedi: Advanced Types

+3

È consentito nelle funzioni [provarlo] (http://goo.gl/M4qegd). Continuo a pensare (in modo ingenuo) che possa essere consentito nelle proprietà. Ma hai risposto alla mia domanda. Btw. È fantastico avere un membro del team ts su StackOverflow, grazie per questo. PS: la mia più grande preoccupazione è la compilazione lenta, muoio lentamente ogni volta che mi occorrono 5 secondi per vedere il mio codice in azione :) – basarat

+5

V1.4 ora consente loro di rispondere in modo utile a –

5

Non dire questo risponde alla tua domanda, ma potrebbe si ricorrere a qualcosa di simile?

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. Tuttavia, il mio scenario di utilizzo sta definendo interfacce dattiloscritto per cose come: https://github.com/gruntjs/grunt-contrib-watch#optionsevent Attualmente I (e altri) ricorrono a 'any' per tali casi – basarat

52

A partire dal 2015, sindacali tipi di lavoro:

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

Questa dovrebbe essere la risposta accettata . –

Problemi correlati