Javascript 实现接口属性的类型脚本
我已经声明了如下接口Javascript 实现接口属性的类型脚本,javascript,jquery,angularjs,angular,typescript,Javascript,Jquery,Angularjs,Angular,Typescript,我已经声明了如下接口 interface Base { required: string; } 我在类中实现了接口,如 class MyClass implements Base{ method(): void { console.log(this.required); } } 但我有以下错误 严重性:“错误”消息:“类“MyClass”未正确实现 接口“基”。类型“MyClass”中缺少属性“required” 在:'5,7'来源:'ts' 严重性:
interface Base {
required: string;
}
我在类中实现了接口,如
class MyClass implements Base{
method(): void {
console.log(this.required);
}
}
但我有以下错误
严重性:“错误”消息:“类“MyClass”未正确实现
接口“基”。类型“MyClass”中缺少属性“required”
在:'5,7'来源:'ts'
严重性:“错误”消息:“属性”required“在类型上不存在
“MyClass.”位于:“7,26”来源:“ts”
如果我声明必需:字符串代码>再次在课堂上,然后没有错误
interface Base {
required: string;
}
class MyClass implements Base{
required: string;
method(): void {
this.required="ddd";
console.log(this.required);
// you can access HTMLElement
}
}
var ss=new MyClass();
ss.method();
接口就是这样工作的。如果在接口中定义属性,则需要在实现接口的类中定义相同的属性。如果您希望在不重新定义属性的情况下使用required属性,则应创建一个类并对其进行扩展。接口就是这样工作的。如果在接口中定义属性,则需要在实现接口的类中定义相同的属性。如果您想在不重新定义属性的情况下使用required属性,则应创建一个类并对其进行扩展。您的错误是正确的。如果您的类
实现了一个接口
,那么它还必须实现所有所需的属性和方法。如果不想实现某些属性或方法,可以使用?
符号将它们声明为可选
interface Base {
required: string;
someProperty?: string; // << look at the symbol `?` in the end of the property
}
而且不仅可以实现接口。也可以将它们用作类型。如果你有一个接口
interface Base {
required: string;
}
const obj: Base = { };
interface Name {
name: string
}
可以创建该接口类型的对象
interface Base {
required: string;
}
const obj: Base = { };
interface Name {
name: string
}
但在这里您将得到一个错误,因为如果您的对象是Base
类型,则需要提供所有必需的属性。所以你需要写作
const obj: Base = { required: 'Yes' };
这将保护您的代码不受逻辑错误的影响,并且您的代码对于对象也是强类型的,您不想为其创建类,但希望说明它必须是什么shape
示例
你有一个接口
interface Base {
required: string;
}
const obj: Base = { };
interface Name {
name: string
}
并且上课
class Car implements Name {
name: string;
engine: string
constructor(name: string, engine: string){
this.name = name;
this.engine = engine;
}
}
class Person implements Name {
name: string;
surname: string;
constructor(name: string, surname: string){
this.name = name;
this.surname = surname;
}
}
var arr: Name = [new Car('Car', 'JZ'), new Person('Name', 'Surname')];
这里的arr
是一个类型为Name
的数组。因此,如果您获取arr[0]
,并调用它.engine
,IntelisSense将抛出一个错误,即typeName
中没有engine
属性。但是您可以确定,该数组中的每个对象都有name
属性,因为该数组的类型是name
,并且它有一个必需的属性name,您的错误是正确的。如果您的类
实现了一个接口
,那么它还必须实现所有所需的属性和方法。如果不想实现某些属性或方法,可以使用?
符号将它们声明为可选
interface Base {
required: string;
someProperty?: string; // << look at the symbol `?` in the end of the property
}
而且不仅可以实现接口。也可以将它们用作类型。如果你有一个接口
interface Base {
required: string;
}
const obj: Base = { };
interface Name {
name: string
}
可以创建该接口类型的对象
interface Base {
required: string;
}
const obj: Base = { };
interface Name {
name: string
}
但在这里您将得到一个错误,因为如果您的对象是Base
类型,则需要提供所有必需的属性。所以你需要写作
const obj: Base = { required: 'Yes' };
这将保护您的代码不受逻辑错误的影响,并且您的代码对于对象也是强类型的,您不想为其创建类,但希望说明它必须是什么shape
示例
你有一个接口
interface Base {
required: string;
}
const obj: Base = { };
interface Name {
name: string
}
并且上课
class Car implements Name {
name: string;
engine: string
constructor(name: string, engine: string){
this.name = name;
this.engine = engine;
}
}
class Person implements Name {
name: string;
surname: string;
constructor(name: string, surname: string){
this.name = name;
this.surname = surname;
}
}
var arr: Name = [new Car('Car', 'JZ'), new Person('Name', 'Surname')];
这里的arr
是一个类型为Name
的数组。因此,如果您获取arr[0]
,并调用它.engine
,IntelisSense将抛出一个错误,即typeName
中没有engine
属性。但是您可以确定,该数组中的每个对象都有name
属性,因为该数组的类型是Name
,并且如果您不想删除required,它有一个必需的属性Name:string
两次为Base
使用类instate接口
,并扩展instate实现
class Base {
required: string;
}
class MyClass extends Base{
method(): void {
this.required="ddd";
console.log(this.required);
// you can access HTMLElement
}
}
如果您不想删除required:string
两次使用class
instate接口forBase
并扩展instate工具,请查看。
class Base {
required: string;
}
class MyClass extends Base{
method(): void {
this.required="ddd";
console.log(this.required);
// you can access HTMLElement
}
}
在网上查一查Thanks@Andr安德拉德,但在这里声明财产似乎没有用interfaceThanks@Andr安德拉德,但在这里声明财产似乎没有用interfacethanks@Suren但是在界面中声明属性似乎没有用为什么没有用?您可以在代码中使用类型检测。考虑到您有许多实现接口的类,因此您可以将值赋值为<代码>接口< /代码>类型,确保该对象至少具有interface@Suren.If你不介意你能给我举个更好的例子来证明这一点吗。Thanksthanks@Suren但是在界面中声明属性似乎没有用为什么没有用?您可以在代码中使用类型检测。考虑到您有许多实现接口的类,因此您可以将值赋值为<代码>接口< /代码>类型,确保该对象至少具有interface@Suren.If你不介意你能给我一个更好的例子来证明这一点。谢谢Hanks@Magu。但是在interfaceThanks@Magu中声明属性似乎没有用。但是在interfaceinterface中声明属性似乎没有用在javascript中什么都没有,如果从接口实现类,则需要提供所有必填字段。在javascript中,接口什么都不是,如果从接口实现类,则需要提供所有必填字段。