类型“未知”.ts(2339) 上不存在属性“名称”
Posted
技术标签:
【中文标题】类型“未知”.ts(2339) 上不存在属性“名称”【英文标题】:Property 'name' does not exist on type 'unknown'.ts(2339) 【发布时间】:2020-08-29 19:53:20 【问题描述】:我正在尝试返回一个具有 name 属性的新对象。但它一直给我这个错误,但代码编译没有任何问题。我正在使用 Angular 9 和 AnfularFirestore 来访问 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”