Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在“键入”变量(vs接口)和“建模”中使用类(用于Typescript Angular 2项目)_Javascript_Angular_Typescript - Fatal编程技术网

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;
}