Вы говорите о классах, реализующих интерфейсы, но тогда ваш пример кода не делает этого, он просто имеет литерал объекта. С этим литералом объекта вы определили, что это будет точно persInterface, поэтому вы получаете сообщение об ошибке при попытке добавить свойство, не являющееся частью persInterface.
Если вы действительно попытайтесь создать класс, который реализует интерфейс, тогда вы можете делать то, что вы хотите, без каких-либо ошибок типа ( детская площадка ):
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; } ,
};