Я только начал делать некоторые машинописные тексты в angular и столкнулся с проблемой, в которой мне нужна помощь.
list = [];
interface a {
s : string;
n : number;
}
const b = {'asdf',1234} as a;
list.push(b)
Но я продолжаю получать ошибку
Argument of type a is not assignable to parameter of type 'never'.
Любые предложения о том, что я могу сделать?
Вы должны указать имя свойства, как показано ниже:
const b = { s: 'asdf', n: 1234 } as a;
Вы забыли добавить имена ключей. Интерфейсы и объекты не зависят от положения аргументов:
const list = [];
interface A {
s: string;
n: number;
}
const b: A = {s: 'asdf', n: 1234};
list.push(b)
Я добавил недостающие const
для объявления списка. Имейте в виду, что имена типов рекомендуется начинать с заглавных букв. Таким образом, вы можете легче различать переменные и типы/интерфейсы. Существует также альтернативный синтаксис с типом A
, объявленным рядом с константой b
.
Взгляните на Инициализатор объекта для способов инициализации объекта.
Также обратите внимание, { 'asdf',1234 }
не инициализация объекта действительныйсинтаксис также. Во многих случаях существует сокращенная запись для указания объектов таким образом (начиная с ES2015), но тогда сокращенная запись требует, чтобы они были допустимыми идентификаторами переменных, а ключ объекта и имя переменной должны быть одинаковыми. .
Вместо этого мы могли бы написать...
const list = [];
interface A {
s: string;
n: number;
}
const s = 'asdf';
const n = 1234;
const b: A = { n, s }; //<-- Short-hand property initializer
list.push(b)
Когда вы определяете в классе член массива, например:
list = [];
Списку по умолчанию будет назначен тип never[]
, здесь вам нужно назначить правильный тип для массива, например:
list: a[] = [];
или
list: any[] = []; // If you don't care (not as good)
Вероятно, вы определяете в Angular свой компонент, например:
interface a {
s : string;
n : number;
}
class MyComponentFails {
list = [];
addToList() {
const b = { s: 'asdf', n: 1234} as a;
this.list.push(b) // Argument of type 'a' is not assignable to parameter of type 'never'.
}
}
Что не сработает, вместо этого определите это так:
class MyComponentWorks {
list: a[] = [];
addToList() {
const b = { s: 'asdf', n: 1234} as a;
this.list.push(b) // Ok
}
}