如何扩展 angular-meteor 的用户模型
How to extend the User model for angular-meteor
在socially project的基础上,尝试扩展用户添加字段:
export interface User extends Meteor.User {
experience: number;
}
但是我收到以下错误:
client/imports/app/parties/party-details.component.ts (71, 7): Type 'Observable<User[]>' is not assignable to type 'Observable<User>'.
Type 'User[]' is not assignable to type 'User'.
Property 'experience' is missing in type 'User[]'.
据我了解,这是因为集合定义:
export const Users = MongoObservable.fromExisting(Meteor.users);
它使用 Meteor.users
(没有 experience field
)而不是我自定义的打字稿定义版本(有 experience field
)。
更新
相关文件:
我该如何解决?或者换句话说:如何扩展 angular-meteor 项目的用户模型?
更新 2
我想将问题改写为:如何扩展 Meteor 用户集合?
export const Users = MongoObservable.fromExisting(Meteor.users);
奖金问题:以及如何在创建新用户时使用 0
启动该字段?
您的问题似乎是您在某处尝试将用户数组 Observable<User[]>
的 Observable 分配给用户 Observable<User>
的 Observable。您是否错误地将 Observable<User[]>
应用为 MongoObservable 的类型?
However I get the following error:
您必须将第 31 行更改为
users: Observable<User[]>;
而不是 users: Observable<User>;
虽然我什至没有在不更改它的情况下抛出错误,所以我不知道错误应该在什么时候发生?
无论如何,Meteor Collection 查找总是 returns 对象数组,因此 users: Observable<User[]>;
是正确的。
How can I extend the Meteor user collection?
关于如何扩展用户:
从技术上讲,您甚至不必扩展它来存储额外的值,您在插入时为 Collection 提供的所有值都将存储在该文档中。
扩展的意思是,扩展要插入的用户文档的模型/模式。对于 TypeScript,这通常只是一个接口,但如果您不使用 TS,则会有替代方案,例如 https://github.com/aldeed/meteor-simple-schema,它实际上提供设置默认值。我说这些只是为了帮助你理解这个概念。
接口虽然只做形状值,但不设置默认值或类似的东西。 AFAIK 这与 Java 中的接口相同。
所以你要做的就是像你说的那样扩展那个接口:
export interface User extends Meteor.User {
experience: number;
}
这应该是正确的。您不能扩展 "collection",集合只是在 MongoDB 中定义集合名称,以及可能的谁可以访问它。
And how can I initiate the field with 0 when creating new users
如前所述,您不能为接口设置默认值。您所能做的就是使用 experience? : number
将值设置为可选,这会将其设置为未定义。
但是,您可以创建一个实现该接口的 class,然后设置默认值。
export class SignupUser implements User{
experience:number=0;
email: string;
password: string;
}
然后在第 29 行的 signup.component.ts
中你可以做
let signupUser=new SignupUser();
signupUser.email= this.signupForm.value.email;
signupUser.password= this.signupForm.value.password;
Accounts.createUser(signupUser, err => [...])
甚至可以立即创建一个新的 SignupUser 并直接绑定到这些值。
或者您也可以采用简单的方法
Accounts.createUser({
experience: 0,
email: this.signupForm.value.email,
password: this.signupForm.value.password
}
希望对您有所帮助。
在socially project的基础上,尝试扩展用户添加字段:
export interface User extends Meteor.User {
experience: number;
}
但是我收到以下错误:
client/imports/app/parties/party-details.component.ts (71, 7): Type 'Observable<User[]>' is not assignable to type 'Observable<User>'.
Type 'User[]' is not assignable to type 'User'.
Property 'experience' is missing in type 'User[]'.
据我了解,这是因为集合定义:
export const Users = MongoObservable.fromExisting(Meteor.users);
它使用 Meteor.users
(没有 experience field
)而不是我自定义的打字稿定义版本(有 experience field
)。
更新
相关文件:
我该如何解决?或者换句话说:如何扩展 angular-meteor 项目的用户模型?
更新 2
我想将问题改写为:如何扩展 Meteor 用户集合?
export const Users = MongoObservable.fromExisting(Meteor.users);
奖金问题:以及如何在创建新用户时使用 0
启动该字段?
您的问题似乎是您在某处尝试将用户数组 Observable<User[]>
的 Observable 分配给用户 Observable<User>
的 Observable。您是否错误地将 Observable<User[]>
应用为 MongoObservable 的类型?
However I get the following error:
您必须将第 31 行更改为
users: Observable<User[]>;
而不是 users: Observable<User>;
虽然我什至没有在不更改它的情况下抛出错误,所以我不知道错误应该在什么时候发生?
无论如何,Meteor Collection 查找总是 returns 对象数组,因此 users: Observable<User[]>;
是正确的。
How can I extend the Meteor user collection?
关于如何扩展用户: 从技术上讲,您甚至不必扩展它来存储额外的值,您在插入时为 Collection 提供的所有值都将存储在该文档中。 扩展的意思是,扩展要插入的用户文档的模型/模式。对于 TypeScript,这通常只是一个接口,但如果您不使用 TS,则会有替代方案,例如 https://github.com/aldeed/meteor-simple-schema,它实际上提供设置默认值。我说这些只是为了帮助你理解这个概念。
接口虽然只做形状值,但不设置默认值或类似的东西。 AFAIK 这与 Java 中的接口相同。
所以你要做的就是像你说的那样扩展那个接口:
export interface User extends Meteor.User {
experience: number;
}
这应该是正确的。您不能扩展 "collection",集合只是在 MongoDB 中定义集合名称,以及可能的谁可以访问它。
And how can I initiate the field with 0 when creating new users
如前所述,您不能为接口设置默认值。您所能做的就是使用 experience? : number
将值设置为可选,这会将其设置为未定义。
但是,您可以创建一个实现该接口的 class,然后设置默认值。
export class SignupUser implements User{
experience:number=0;
email: string;
password: string;
}
然后在第 29 行的 signup.component.ts
中你可以做
let signupUser=new SignupUser();
signupUser.email= this.signupForm.value.email;
signupUser.password= this.signupForm.value.password;
Accounts.createUser(signupUser, err => [...])
甚至可以立即创建一个新的 SignupUser 并直接绑定到这些值。
或者您也可以采用简单的方法
Accounts.createUser({
experience: 0,
email: this.signupForm.value.email,
password: this.signupForm.value.password
}
希望对您有所帮助。