2017-07-13 2 views
-1

Comment indexOf peut-il fonctionner correctement avec un type basique de type TypeScript, maintenant il renvoie toujours -1 même s'il existe?Travailler avec le type de base number et indexOf dans TypeScript

Sur le SelectElement classe J'ai une propriété « extra » contenant un objet avec une clé appelée « quand » qui est un tableau de nombres tel que défini sur le SelectElementInterface.

Maintenant sur le SelectElement classe, j'ai aussi la valeur de la propriété qui est également de type numéro.

Mais lors de l'exécution du code dans la méthode displayExtra sur la classe SelectElement Je suis en cours d'exécution dans une question concernant indexOf. Les sorties des journaux de la console ressemblent à ce qui suit

[16:28:20] console.log: [1,2] 
[16:28:20] console.log: 1 
[16:28:20] console.log: -1 

Comme vous pouvez le voir sur la console enregistre la valeur existe et ils devraient être du même type selon mon interface. Est-ce un bug dans TypeScript ou est-ce que je manque quelque chose ici et comment puis-je obtenir indexOf pour travailler avec le type de numéro de base dans TypeScript?

classe SelectElement

export class SelectElement extends Element<number> { 
    public options: object; 
    public extra: SelectElementInterface; 

    constructor(options: ElementInterface, selectOptions: object, extra: SelectElementInterface) { 
     super(options); 
     this.options = selectOptions; 
     this.extra = extra; 
    } 

    public displayExtra(): boolean { 
     console.log(JSON.stringify(this.extra.when)); 
     console.log(this.value); 
     console.log(this.extra.when.indexOf(this.value)); 

     return this.extra.when.indexOf(this.value) > -1; 
    } 
} 

L'élément super classe

export abstract class Element<type> { 

    public id: number; 
    public type: string; 
    public label: string; 
    public required: boolean; 
    public value: type; 

    constructor(options: ElementInterface) { 
     this.id = options.id; 
     this.type = options.type; 
     this.label = options.label; 
     this.required = options.required; 
    } 

    abstract displayExtra(): boolean; 
} 

ElementInterface

export interface ElementInterface { 
    id: number, 
    type: string, 
    label: string, 
    required: boolean, 
    value: string 
} 

SelectElementInterface

export interface SelectElementInterface { 
    input: string, 
    label: string, 
    required: boolean, 
    when: Array<number>, 
    value: string 
} 

Edit: fautes de frappe et le code Removed pas nécessaire à l'exemple.

+1

S'il vous plaît envisager de faire mieux [MCVE], car cela montre beaucoup de code qui ne fait pertinent à votre problème. –

+1

Toujours pas vraiment sûr de ce que vous essayez d'atteindre. Il serait utile si vous pouvez fournir un échantillon pour exécuter le code, par ex. un test quelconque qui appelle la fonction displayExtra(). Et que vous pouvez expliquer un peu ce que votre résultat attendu de la fonction displayExtra() est. –

+0

Je soupçonne que la propriété 'value' n'est pas un nombre à l'exécution (essayez d'ajouter' console.log (this.value === 1); 'au corps de' displayExtra() '. Puisque vous ne montrez pas où' this.value' est en cours de définition, vous n'avez pas fourni assez d'informations pour répondre à cette question.Si elle est définie dans TypeScript, je m'attendrais à ce qu'elle vous avertisse que vous étiez en train de définir une valeur invalide pour une variable 'number'. il est en JavaScript pur, alors que TypeScript ne peut rien faire pour aider, puisque les types sont effacés au moment de l'exécution.Dans les deux cas, je doute vraiment que le problème soit avec TypeScript ou 'indexOf' – jcalz

Répondre

1

Vous appelez super (options) mais je ne vois pas de valeur étant définie ne importe où dans le constructeur:

constructor(options: ElementInterface) { 
    this.id = options.id; 
    this.type = options.type; 
    this.label = options.label; 
    this.required = options.required; 
    // Should this be set here? 
    // this.value == options.value 
} 
+0

la valeur des éléments est définie dans mon composants angulaires, mais oui, je pourrais supprimer cette ligne et le code devrait encore fonctionner.Merci de le souligner. – Maantje