92 votes

Signatures de types multiples pour les membres, Union Types in TypeScript

Si j'ai une propriété qui peut être une chaîne de caractères ou un booléen, comment dois-je la définir ?

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

Je ne veux pas avoir recours à :

interface Foo{
    bar:any;
}

Je ne pense pas que cela soit possible sans any . Vous pouvez répondre à n'importe laquelle de ces questions :

Ai-je oublié une spécification et est-ce possible dès maintenant ? Quelque chose comme cela est-il prévu ? Une demande de fonctionnalité a-t-elle été enregistrée ?

J'imagine quelque chose comme ça :

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

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

207voto

marcg Points 110

Depuis 2015, les travailleurs syndiqués travaillent :

interface Foo {
    bar:string|boolean;
}

64voto

Ryan Cavanaugh Points 17393

On parle généralement de "types d'union". Le système de types TypeScript à partir de la version 1.4 le permet.

Voir : Types avancés

10voto

Damian Points 917

Je ne dis pas que cela répond à votre question, mais pourriez-vous avoir recours à quelque chose comme ceci ?

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;

0voto

Valentin Bossi Points 31

Quelque chose comme ça ?

interface Base<T, T2> {
  a: T;
  b: T2;
}

type FirstExtendedBase = Base<boolean, string>;

const exampleOne: FirstExtendedBase = {
  a: false,
  b: '',
};

type SecondExtendedBase = Base<number, Date>;

const exampleTwo: SecondExtendedBase = {
  a: 42,
  b: new Date(),
};

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X