类型“未知”.ts(2339) 上不存在属性“名称”

Posted

技术标签:

【中文标题】类型“未知”.ts(2339) 上不存在属性“名称”【英文标题】:Property 'name' does not exist on type 'unknown'.ts(2339) 【发布时间】:2020-08-29 19:53:20 【问题描述】:

我正在尝试返回一个具有 name 属性的新对象。但它一直给我这个错误,但代码编译没有任何问题。我正在使用 Angular 9AnfularFirestore 来访问 Firebase

this.db
  .collection('availableExercises')
  .snapshotChanges()
  .pipe(
    map(docArray => 
        return docArray.map(doc => 
            return 
                id: doc.payload.doc.id,
                name: doc.payload.doc.data().name,
                duration: doc.payload.doc.data().duration,
                calories: doc.payload.doc.data().calories
            ;
        );
    )
  ).subscribe((exercises: Exercise[]) => 
      this.availableExercises = exercises;
      this.exercisesChanged.next([...this.availableExercises]);
  );

这是我用于Exercise

的界面
export interface Exercise
  id: string;
  name: string;
  duration: number;
  calories: number;
  date?: Date;
  state?: 'completed' | 'cancelled' | null;

【问题讨论】:

独立的map 功能是什么? 您提到的错误在哪里 map inside pipe 是 RxJS map 运算符 你是如何导入 Exercise 的?在 name: doc.payload.doc.data().name, 上到底出错了哪一行? 【参考方案1】:

很可能是 TS Lint 错误。一种解决方法是使用方括号而不是点运算符来访问属性。试试下面的

return docArray.map(doc => 
  return (
    id: doc.payload.doc['id'],
    name: doc.payload.doc.data()['name'],
    duration: doc.payload.doc.data()['duration'],
    calories: doc.payload.doc.data()['calories']
  );
);

如果仍然出现错误,请尝试在访问链上替换点运算符。

尽管如此,无论这个错误如何,生成的 JS 都应该是有效的。

【讨论】:

成功了!就像我说的,它正在编译,但是哪个属性有错误。但是错误消失了。谢谢!

以上是关于类型“未知”.ts(2339) 上不存在属性“名称”的主要内容,如果未能解决你的问题,请参考以下文章

错误 TS2339:类型“”上不存在属性“contenido”

TS2339:“请求”类型上不存在属性“用户”

TS2339:类型上不存在属性“帖子”

TS2339:“家”类型上不存在属性“道具”

TypeScript:TS2339 错误——“对象”类型上不存在属性

错误 TS2339:“主页”类型上不存在属性“路由器”