Машинопись: ошибка TS2693: «Примечание» относится только к типу, но используется здесь в качестве значения

#angular #typescript

Вопрос:

Я пытаюсь использовать Typescript для своего проекта firebase и получаю следующие ошибки.

  error TS2693: 'Note' only refers to a type, but is being used as a value here.
 

Я использовал следующий код

 interface Note {
 image: string;
 name: string;
 pdf: string;
}

const itemname = Note.name;
 

Но это, похоже, не работает

вот импорт

 import {
AngularFirestore,
AngularFirestoreCollection,
AngularFirestoreDocument,
} from '@angular/fire/firestore';
import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs';
import 'rxjs/add/operator/map';
 

вот другая часть

   export class Advance11Component implements OnInit {
  notesCollection: AngularFirestoreCollection<Note>;
  notes: Observable<Note[]>;

  constructor(private afs: AngularFirestore) {}
  ngOnInit(): void {
  this.notesCollection = this.afs
    .collection('class11AdvancedTheory')
    .doc(itemname)
    .collection(itemname, (ref) => {
      return ref;
    });
    this.notes = this.notesCollection.valueChanges();
   }
  }
 

Комментарии:

1. Ты имел в виду type itemname = Note.name или const itemname: Note.name . Как следует из ошибки, Note.name это тип, и вы используете его в качестве переменной

Ответ №1:

interface (Или type ) может сказать вам форму чего-то.

 // A `tree` has a number of `branches`.
interface Tree {
  branches: number
}
 

Экземпляр (например const x = ... ) присваивает определенное значение, на которое можно ссылаться во время выполнения.

 // This `tree` has 34 `branches`.
const myTree: Tree = { branches: 34 }
 

Вы не можете смешивать эти два элемента во время выполнения заданий. Взяв ваш пример, вы бы спросили «Сколько branches у myTreeBranches вас есть?», и он сказал бы « typeof Tree.branches есть number «, информация, которая не полезна или не поддерживается в JavaScript.

 // Doesn't work
const myTreeBranches = Tree.branches // typeof `Tree.branches` is `number`. 
 

Вы, наверное, хотите один из этих:

 interface Tree {
    branches: number
}

type TreeBranches = Tree['branches'] // extract an interface property

const myTree: Tree = { branches: 34 } // create an instance of `Tree`

const myTreeBranches: Tree['branches'] = 34 // create variable that could be assigned to
                                            //    an instance of `Tree`