Типичный класс реализует интерфейс, если метод отсутствует, компилятор не выдает ошибку - PullRequest
0 голосов
/ 17 июня 2020

У меня есть класс, реализующий интерфейс. Если класс не включает метод, интерфейс которого требует, чтобы компилятор машинописного текста не вызывал ошибку, а выполняет ее.

Я хочу заставить компилятор выдавать ошибку, если ошибка отсутствует.

interface PersonInterface {
  name: string;  
  age: number;  
}
class Person implements PersonInterface {    
  name: string = 'Mary';  
  foo: any = 'abc';
}

alert(new Person().name)

Вы можете проверить код здесь на игровой площадке https://www.typescriptlang.org/play/?ssl=1&ssc=1&pln=10&pc=31#code / JYOwLgpgTgZghgYwgAgArQM4HsQElzTxLIDeAsAFDLIhwC2EAXMhmFKAOYDc1l1cHJjQCudAEbQeySgF9KCADZwMGNJhzJgdAA4KIDcKvRRseArEQoS1XlRr0hrdiA7IAvMgDkAWThQAnp5SfMgwWFjMcCD + 7l5wYghBspTyONh6AHQKWBwAFCAQAO5qJji5AJQZtAzlQA

1010 * Codesandbox LINK: https://codesandbox.io/s/typescript-3bqq4?file= / SRC / index.ts

1 Ответ

1 голос
/ 17 июня 2020

Код на игровой площадке содержит ошибки для свойства age, и именно так вы можете ввести метод.

  • Ввод метода
interface PersonInterface {
  name: string;  
  age: number;

  // type a method
  sayHello(): string

  // type function property
  repeat: (sentence: string) => string
}

class Person implements PersonInterface {    
  name: string = 'Mary';  
  foo: any = 'abc';

  sayHello() {
    return `Hello my name is ${this.name}`
  }

  repeat = (input) => {
    return `${input}`
  }
}

Если хотите Чтобы избежать ошибки, вам следует подумать об использовании абстрактного класса. Следует отметить, что вы не можете создать экземпляр абстрактного класса. Документы

abstract class PERSON {
  abstract name: string;
  abstract age: number;
  abstract repeat(sentence: string): string;
}

class Person extends PERSON{
  //
  // Will error out for not implementing
  // properties and methods
  //
}

Ошибки исчезнут

class Person extends PERSON {
  constructor(public name: string, public age: number) {
    super();
  }

  repeat(input: string) {
    return `${input}`;
  }
}
...