Javascript 为什么要在Typescript中使用接口

Javascript 为什么要在Typescript中使用接口,javascript,typescript,Javascript,Typescript,有人能告诉我为什么我要在Typescript中使用接口吗?它们是什么 接口示例: interface Person { firstName: string; lastName: string; } class Student { fullName: string; constructor(public firstName: string, public lastName: string) { this.fullName = firstName +

有人能告诉我为什么我要在Typescript中使用接口吗?它们是什么

接口示例:

interface Person {
    firstName: string;
    lastName: string;
}

class Student {
    fullName: string;
    constructor(public firstName: string, public lastName: string) {
        this.fullName = firstName + " " + lastName;
    }
}

function greeter(person : Person) {
    return "Hello, " + person.firstName + " " + person.lastName;
}

let student = new Student("John", "Smith");
console.log(greeter(student));
输出:你好,约翰·史密斯

没有相同输出接口的示例:

class Student {
    fullName: string;
    constructor(firstName: string, lastName: string) {
        this.fullName = firstName + " " + lastName;
    }
}

function greeter(person : Student) {
    return "Hello, " + person.fullName;
}

let student = new Student("John", "Smith");
console.log(greeter(student));
输出:你好,约翰·史密斯


为什么接口在这种特殊情况下有用?我发现很难理解typescript中接口的用法。非常感谢您的详细解释

接口是定义对象文字将具有的属性的非常好的方法。这非常类似于基于策略模式定义契约,typescript将根据该策略模式验证对象文本。您的代码将不会编译,因为您没有实现
Person

JS是一种松散类型的语言。因此,以下是可能的:

var a=新学生();

a、 fullName=a.firstName+“”+a.lastName
接口对于静态类型检查非常有用。也就是说,当你开发你的应用程序时,你的IDE(例如WebStorm或VS代码)可以告诉你你将尝试访问一个未定义的属性,或者你将字符串放入一个需要数字的变量中

然后,您可以在生成/传输时再次运行这些检查。所以,如果您发送这样的代码,您可以告诉它以防止发送错误代码

例如,在JavaScript中,您可以发布以下内容:

const x = {
  user: {
      name: 'Rajesh',
  },
};
console.log(x.myUser.name);
这段代码将被发送和编译。但是如果你尝试调用它,这个脚本将崩溃,你的网站将无法工作

如果将其作为接口,IDE可能会警告您该问题。如果您将捆绑程序(例如tsc编译器)配置为不允许出现这些问题,它甚至不会让您发送错误代码,您的网站将继续工作


因此,一旦编译成JavaScript,它并不是在做技术上有用的事情,而是从build/“devops”的角度。与过梁相同,与测试相同,与文档相同。如果你没有,没关系,你的网站正在运行,但是如果你有任何一个网站,你就不太可能破坏它。

查找策略模式。可能是@DanielA.White的副本,它确实为我编译,你能试试吗?@Mizlul我错过了自动初始化。注意:如果你认为上面的答案不正确/不是必需的。请在投票的同时分享你的观点。我认为这是我理解差异的好答案,谢谢@很高兴我能帮助你。解释得很好,谢谢!