Typescript 对象或 classes:当 class 实现接口时不可能有额外的属性?

Typescript objects or classes: not possible to have additional properties when class implements interface?

我想知道为什么当这个 class 实现了一个接口时,为什么不能在打字稿 class 中实现额外的属性或功能...它说: ..."Object literal may only specify known properties and "FirstName" does not exist in type persInterface" .. 我认为在 java 中也可以实现其他道具或功能,implementas 接口只是 class 的强制子集而不是限制..Typescript 中的这种行为正常吗?

interface persInterface {
         lastName: String,
         sayHello: () => number
     }

 var person: persInterface = { 
    FirstName:"Tom", 
    lastName:"Hanks", 
    sayHello: ()=>{ return 10} ,
 };

您谈到 classes 实现接口,但是您的示例代码并没有这样做,它只有一个对象文字。使用该对象字面量,您已经定义它将 恰好 一个 persInterface,这就是为什么在尝试添加不属于 persInterface 的 属性 时出现错误的原因。

如果您确实尝试拥有一个实现接口的 class,那么您可以做您想做的事,而不会出现任何类型错误 (playground link):

interface persInterface {
  lastName: string,
  sayHello: () => number
}

class Person implements persInterface {
  firstName: string;
  lastName: string;
  constructor(firstName: string, lastName: string) {
    this.firstName = firstName;
    this.lastName = lastName;
  }

  sayHello(): number {
    return 10;
  }
}


const person = new Person('tom', 'hanks');

如果您正在使用文字,那么您需要创建一个从基本接口扩展的接口并指定额外的属性是什么:

interface persInterface {
  lastName: string,
  sayHello: () => number
}

interface persPlusPlus extends persInterface {
  lastName: string
}

const person: persPlusPlus = { 
  firstName:"Tom", 
  lastName:"Hanks", 
  sayHello: ()=> { return 10; } ,
};