Javascript 在“键入”变量(vs接口)和“建模”中使用类(用于Typescript Angular 2项目)
假设我有一个模型班Javascript 在“键入”变量(vs接口)和“建模”中使用类(用于Typescript Angular 2项目),javascript,angular,typescript,Javascript,Angular,Typescript,假设我有一个模型班 class User { name: string; email: string; } 以及与用户相关的服务 class UserService { getInfo (usr: User) { console.log(usr); } } usr:User是getInfo方法的输入参数,并且没有为该语句创建用户类,因为用户只需键入usr。相反,我们可以用接口来代替它,不是吗 是的,我知道Angular 2官方指南建议尝试使用类
class User {
name: string;
email: string;
}
以及与用户相关的服务
class UserService {
getInfo (usr: User) {
console.log(usr);
}
}
usr:User是getInfo方法的输入参数,并且没有为该语句创建用户类,因为用户只需键入usr。相反,我们可以用接口来代替它,不是吗
是的,我知道Angular 2官方指南建议尝试使用类而不是接口
>引用:考虑使用类而不是接口
我可以接受,尽管这很奇怪
我的问题是,既然我们不从类创建任何实例,为什么要使用类来键入变量?我们可以替换UserService类,如下所示,它也可以工作
class UserService {
getInfo (usr: any) { //this work too
console.log(usr);
}
}
如果我错了,请纠正我
[1] 这将创建具有类内容的属性
class UserService {
usr: User = User; //usr = { name: '', email: ''}
}
[2] Angular 2使用它进行依赖项注入,假设我将用户列为提供者,在本例中,它与1类似,因为我们只是将用户复制到usr。通常,我们在服务上而不是模型上进行DI,因为注入模型将具有与将其分配给变量相同的效果,对吗
class UserService {
constructor (private usr: User) {}
}
[3] 这让我很困惑。。。因为既然我们不需要它,为什么我们还要这么做?因为没有创建任何内容,所以这里没有任何用途
class UserService {
usr: User; //usr: any; (?)
}
class UserMoreService {
getInfo (usr: User) {console.log(usr);} //usr: any (?)
}
最后,我想知道在Angular 2项目中创建模型类的动机是什么
我们有一个组件来显示数据,要获取数据,我们可以从相关服务请求数据,服务将从服务器获取数据
你能看到这个吗?我们不需要第三方模型来保存数据,因为一切都可以在不声明模型类的情况下完成。请告诉我什么时候创建模型好吗?我看不出有任何理由这样做……这不是必须的,只是一个建议 为什么? 接口类可以是角度依赖项注入中的提供者查找标记 资料来源: 创建类的工作与创建接口的工作基本相同,但您可以在稍后的提供者令牌中将这些类用作类接口 这可以用作角度提供程序之间的继承类型
export abstract class MinimalLogger {
logs: string[];
logInfo: (msg: string) => void;
}
当您以这种方式使用类时,它被称为类接口。类接口的主要好处是,您可以获得接口的强类型,并且可以像普通类一样将其用作提供者令牌
资料来源:
旁注:如果您确定不打算将其用作提供者令牌,那么您应该使用接口,因为它们在代码传输到JavaScript后消失。因此,他们不会使用你的记忆
使用类作为接口可以提供真实JavaScript对象中接口的特征
当然,真实的对象会占用内存。为了最小化内存开销,该类不应该有任何实现
好的,我明白了。所以,如果我需要一个全局变量,比如说CurrentUser,我可以声明一个模型类CurrentUser并将其设置为顶级提供程序,然后它可以在任何地方访问。然而,在Angular 2中,我们通常创建一个服务并向组件发送数据,并让组件保存这些数据。这是角度2的趋势吗?我是说设计模式。。。如果我们迫切需要一个顶级模型来保存数据,我们通常会将其注入一个单例顶级服务中,让服务保存这些数据,对吗?@BooYanJiong IMO这是正确的,你应该尽可能地保持简单,但简单可以是一个相对的术语:-至于Angular 2趋势,即使是Angular团队也不经常使用他们的风格指南。用于保存数据;如果是共享服务,服务可以保存数据,或者可能还有另一个我现在记不起来的实现。总的来说,你的问题是基于一点意见的,你会很感激的,但我认为你在正确的轨道上。
export abstract class MinimalLogger {
logs: string[];
logInfo: (msg: string) => void;
}