【问题标题】:Typescript Class implement Interface if method is missing compiler not throwing Error如果方法缺少编译器不抛出错误,Typescript 类实现接口
【发布时间】:2020-10-06 19:02:37
【问题描述】:

我有一个实现接口的类。如果一个类不包含接口需要打字稿的方法,编译器不会抛出错误而是执行错误。

如果缺少错误,我想强制编译器抛出错误。

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

代码沙盒链接:https://codesandbox.io/s/typescript-3bqq4?file=/src/index.ts

【问题讨论】:

  • 不清楚你在问什么。 Playground 中的代码会引发编译器错误。
  • @RobbyCornelissen 上面的示例应该给出一个错误,但它只是运行而没有抛出任何错误。编译器只会使错误行变成红色,仅此而已。即使出现错误,CODE 也可以成功运行。请仔细检查代码框链接,然后您就会明白我的意思。
  • 你明白 TypeScript 只是一个编译时构造,对吧?一旦它编译成 JavaScript,所有的类型检查都会消失。 TypeScript 的整个目标是在编译时捕获尽可能多的可能问题。大量 TypeScript 编译时错误不会转化为 JavaScript 运行时错误。

标签: typescript typescript-typings typescript-generics


【解决方案1】:

游乐场中的代码因年龄属性而出错,这是您可以键入方法的方式。

  • 键入方法
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}`
  }
}

如果你想让它出错,你应该考虑使用抽象类,需要注意的一点是你不能实例化抽象类。 Docs

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}`;
  }
}

【讨论】:

  • 您好,我不希望错误消失。我希望打字稿验证并引发错误。目前它没有抛出错误。它只是运行示例。你可以查看我上面分享的代码沙箱链接。
  • 感谢您的帮助。你解决了我的问题。抽象类是解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 2017-03-29
  • 1970-01-01
  • 2014-10-10
  • 2019-05-09
  • 1970-01-01
  • 2020-04-06
相关资源
最近更新 更多