2016-01-12 6 views
26

Добрый день. Я новичок в Type Script, используя VSCode.Аргумент типа 'X' не присваивается параметру типа 'X'

ПРИСТУПАЯ следующие ошибки:

  1. ошибка TS2322: Тип '() => строка' не может быть назначен для типа 'строка'.

  2. ошибка TS2322: Тип '() => номер' не может быть назначен для типа 'номер'.

Код:

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; 

Я пытаюсь создать экземпляр LinkedObject класса с использованием упомянутых выше методов интерфейса:

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); 
     } 
    } 
} 

Любая помощь будет высоко оценен.

ответ

31

Вы пропустите скобка:

var value: string = dataObjects[i].getValue(); 
var id: number = dataObjects[i].getId(); 
+8

Полезно понять, что говорит об ошибке, чтобы помочь вам в будущем. 'Type '() => string' не присваивается типу 'string'.' В основном говорит в этом случае. Функция, возвращающая строку, не может быть назначена переменной типа string. Когда вы читаете '() => string' правильно, все должно иметь смысл. Если бы это был чистый JS, у вас не было бы ошибки, и ваша переменная указывала бы на функцию вместо возвращаемого значения, и было бы еще труднее отследить, что происходит. – DeezCashews

3

Кроме добавления других сценариев, где вы можете увидеть эти ошибки

  1. Первой Проверьте вас компилятор версию, скачать последнюю машинопись компилятора для поддержки ES6 синтаксисы

  2. машинописи до сих пор производит вывод, даже с опечатками это не фактически блокировать развитие,

Когда вы видите эти ошибки Проверьте синтаксис при инициализации или при вызове этих методов или переменных,
Проверьте, находится ли параметры функций неправильного типа данных, вы инициализирован как «строка» и присвоение «логическое» или «номер»

для примера

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' 

Сообщение об ошибке здесь потому, что квадратные скобки для массива инициализации отсутствует, оно работает даже без него, но VS красный код предупреждения.

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

Примечание:
Помните, что Javascript приведения типов в соответствии со значением, присвоенным, так машинопись уведомляет их, но код выполняется даже при выполнении этих ошибок выделены в VS Кодекса

Ex:

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

В моем случае, как ни странно, я пропускал импорт класса было жалуется и мой IDE не обнаружить его.

1

Я делаю угловой 2 и машинопись, и я не понимаю, что я имел место в моей стрелке нотации

Я имел .map(key = > вместо .map(key =>

Определенно держать глаза открытыми для глупых ошибок синтаксиса

Смежные вопросы

 Смежные вопросы