谁能告诉我为什么我应该在Typescript中使用Interface,它们是什么?
接口示例:
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));
输出:您好,约翰·史密斯
为什么在这种特殊情况下接口有用?我发现很难理解打字稿中接口的使用。任何详细的解释都非常感谢!
答案 0 :(得分:2)
JS是一种松散类型的语言。因此可以进行以下操作:
resources/views/website/index.blade.php
定义接口后,它将知道对象的架构是什么,如果执行该选项,它将给您一个错误。
Typescript的整个目标是提供编译时警告。仅当您的对象具有预定义的结构时,才能实现此目的。这也有助于键入内容,因为IDE可以为您提供有效的建议。
答案 1 :(得分:1)
接口是定义对象文字将具有的属性的非常好方法。这与根据策略模式定义合同非常相似,您的对象字面量将通过打字稿来验证,基于策略模式。您未实现Person
时,代码将无法编译。
答案 2 :(得分:1)
接口对于静态类型检查很有用。意思是,当您开发应用程序时,您的IDE(例如WebStorm或VS Code)可以告诉您您将尝试访问未定义的属性,或者将字符串放入需要数字的变量中。
然后您可以再次在构建/传输时间运行这些检查。因此,如果您发布了此类代码,则可以告诉它以防止发布错误的代码。
例如在JavaScript中,您可以发货:
const x = {
user: {
name: 'Rajesh',
},
};
console.log(x.myUser.name);
此代码将交付并编译。但是,如果您尝试调用它,则此脚本将中断,并且您的网站将无法正常工作。
如果将其用作接口,则IDE可能会警告您有关该问题的信息。而且,如果您将捆绑程序(例如tsc编译器)配置为不允许出现这些问题,则它甚至都不会让您发布错误的代码,并且您的网站将继续正常运行。
因此,一旦编译为JavaScript,这并不是精确地做技术上有用的事情,而是从build /“ devops”角度进行。与短绒相同,与测试相同,与文档相同。如果您没有它,那没关系,您的网站正在运行,但是,如果您有任何一个,则您破坏它的可能性较小。