web-dev-qa-db-fra.com

L'argument de type 'X' n'est pas assignable au paramètre de type 'X'

Bonne journée. Je suis nouveau sur Type Script, en utilisant VSCode.

Obtenir les erreurs suivantes:

  1. erreur TS2322: Le type '() => chaîne' n'est pas assignable au type 'chaîne'.

  2. erreur TS2322: Le type '() => numéro' n'est pas assignable au type 'numéro'.

Le code:

DTO.ts

interface DTO {

    getId(): number;
    getValue(): string;
}
export = DTO;

LinkedObject.ts

class LinkedObject {

    public value: string = "Not Set";
    public id: number = 0;

    constructor(value?: string, id?: number) {
        this.value = value;
        this.id = id;
    }
}
export = LinkedObject;

J'essaye d'instancier LinkedObject class en utilisant les méthodes d'interface mentionnées ci-dessus:

TravelClientFormPopulator.ts

class TravelClientFormPopulator {

    public populateComboBoxUsingDTOs(dataObjects: Array<DTO>, comboBoxID: string): void {

        // Get the combo box
        var selectElement = <HTMLSelectElement> document.getElementById(comboBoxID);
        // Reset the options 
        selectElement.options.length = 0;

        var linkedObjectsToAdd: LinkedObject[] = new Array<LinkedObject>();

        var defaultLinkedObject: LinkedObject = new LinkedObject("Not Selected", 0);

        linkedObjectsToAdd.Push(defaultLinkedObject);

        for (var i = 0; i < dataObjects.length; i++) {
            var value: string = dataObjects[i].getValue; // Error here
            var id: number = dataObjects[i].getId; // And here
            var linkedObject: LinkedObject = new LinkedObject(value, id);
        }
    }
}

Toute aide sera grandement appréciée.

49
Sasha

Vous manquez de parenthèses:

var value: string = dataObjects[i].getValue(); 
var id: number = dataObjects[i].getId();
41
Martin Vseticka

Pour ce que cela vaut, si quelqu'un a ce problème uniquement dans VSCode, il suffit de redémarrer VSCode pour le résoudre. Parfois, Intellisense semble gâcher les importations ou les types.

En relation avec TypeScript: l'argument de type 'RegExpMatchArray' n'est pas assignable au paramètre de type 'chaîne'

5
MaximeBernard

vous utilisez simplement le type de variable any et supprimez ces types de problèmes.

code d'erreur :

  let accessToken = res;
  localStorage.setItem(LocalStorageConstants.TOKEN_KEY, accessToken);

donnée erreur L'argument de type '{}' n'est pas assignable à un paramètre de type 'chaîne'.

code de réussite:

  var accessToken:any = res;
  localStorage.setItem(LocalStorageConstants.TOKEN_KEY, accessToken);

nous créons une variable de type var, puis utilisons une variable de type any et résolvons ce problème.

any = manipule n'importe quel type de valeur afin de supprimer l'erreur.

Ajoutant également d'autres scénarios où vous pouvez voir ces erreurs

  1. Vérifiez d'abord la version du compilateur, téléchargez le dernier compilateur TypeScript pour prendre en charge les syntaxes ES6.

  2. TypeScript produit toujours une sortie même avec des erreurs de frappe, cela ne bloque pas le développement,

Lorsque vous voyez ces erreurs, recherchez les syntaxes lors de l’initialisation ou lors de l’appel de ces méthodes ou variables,
Vérifiez si les paramètres des fonctions sont d'un type de données incorrect, que vous avez initialisé sous le nom "chaîne" et en affectant un "booléen" ou un "nombre"

Par exemple

1.

 private errors: string;
    //somewhere in code you assign a boolean value to (string)'errors'
    this.errors=true
    or 
    this.error=5

2.

 private values: Array<number>;    
    this.values.Push(value);  //Argument of type 'X' is not assignable to parameter of type 'X'

Le message d'erreur ici est parce que les crochets pour l'initialisation du tableau sont manquants. Cela fonctionne même sans cela, mais le code VS alerte en rouge.

private values: Array<number> = [];    
this.values.Push(value);

Note:
N'oubliez pas que les transmissions typographiques Javascript sont fonction de la valeur attribuée. TypScript les en informe, mais le code est exécuté même si ces erreurs sont mises en évidence dans le code de VS.

Ex:

 var a=2;
 typeof(a) // "number"
 var a='Ignatius';
 typeof(a) // "string"
3
Ignatius Andrew

Je fais angular 2 et TypeScript et je n'avais pas réalisé qu'il y avait un espace dans ma notation de flèche

J'avais .map(key = > au lieu de .map(key =>

Gardez les yeux ouverts pour les erreurs de syntaxe stupides

2
Mike Kellogg

Dans mon cas, c’était que j’avais une interface personnalisée appelée Item, mais j’ai importé accidentellement à cause de la saisie semi-automatique, la classe angular Item. Assurez-vous que vous importez du bon paquet.

1
Gustavo Sánchez

Ce problème survient lorsque votre compilateur ne comprend pas la différence entre l'opérateur de conversion de la chaîne de type vers Number.

vous pouvez utiliser l'objet Number et transmettre votre valeur pour obtenir les résultats appropriés à l'aide de Number (<<<< ... Nom_variable ...... >>>>)

0
Sachin Mishra

Bizarrement, dans mon cas, il me manquait l'importation de la classe dont elle se plaignait et mon IDE ne l'a pas détectée.

0
artemisian