Аргумент типа <Интерфейс> нельзя присвоить параметру типа "никогда"

Я только начал делать некоторые машинописные тексты в 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'.

Любые предложения о том, что я могу сделать?

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
0
60
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы должны указать имя свойства, как показано ниже:

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

Детская площадка

Другие вопросы по теме