Подтвердить что ты не робот

Аргумент типа 'X' не присваивается параметру типа 'X'

Добрый день. Я новичок в типе Script, используя VSCode.

Получение следующих ошибок:

  • error TS2322: Type '() = > string' не присваивается типу 'string'.

  • error TS2322: Type '() = > number' не присваивается типу 'number'.

Код:

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

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

4b9b3361

Ответ 1

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

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

Ответ 3

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

  • Сначала проверьте версию компилятора, Загрузите последний компилятор Typescriptдля поддержки синтаксиса ES6

  • typescript все еще производит вывод даже при ошибках ввода, это не фактически блокировать разработку,

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

Пример

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 выводит тип в соответствии с назначенным значением, So Typescript уведомляет их, но код выполняется даже с этими ошибками, выделенными в VS Code

Пример:

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

Ответ 4

Я делаю angular 2 и typescript, и я не понимал, что у меня есть пробел в обозначении стрелки

У меня было .map(key = > вместо .map(key =>

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

Ответ 5

В моем случае это был пользовательский интерфейс Item, но я случайно импортировал его из-за автозаполнения, углового класса Item. Убедитесь, что вы импортируете из нужной упаковки.

Ответ 6

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

Ответ 7

Эта проблема в основном возникает, когда ваш компилятор не может понять разницу между оператором приведения типа string к Number.

Вы можете использовать объект Number и передать свое значение, чтобы получить соответствующие результаты для него, используя Number (<<<<... Variable_Name...... >>>>)

Ответ 8

Вы просто используете переменную любого типа и устраняете эти типы проблем.

код ошибки:

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

данная ошибка Аргумент типа '{}' не может быть назначен параметру типа 'string'.

Код успеха:

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

мы создаем переменную типа var, затем используем переменную типа any и решаем эту проблему.

any = обрабатывать любой тип значения, чтобы устранить ошибку.