函数实现丢失或没有紧跟在声明之后
Function implementation is missing or not immediately following the declaration
当我们声明一个没有实现的函数或出现语法错误时,就会出现“函数实现丢失或没有紧跟在声明之后”的错误。
要解决错误,请提供函数的实现并修复代码中的任何语法错误。
以下是错误发生方式的 3 个示例。
索引.ts
class Person { // ⛔️ Error: Function implementation is missing or not immediately following the declaration.ts(2391) console.log('bobbyhadz.com') } // ------------------------------------------------------ // ⛔️ Error: function sum(a: number, b: number): void; // ------------------------------------------------------ abstract class Employee { abstract salary: number; // ⛔️ Error: increaseSalary(): number; }
直接在类的主体中编写代码
第一个示例中的问题是我们直接在类的主体中编写代码,而没有先声明方法。
要解决该错误,请在类中声明一个方法并将您的代码移到该方法中。
索引.ts
class Person { constructor(public name: string, public age: number) { console.log('bobbyhadz.com'); } someMethod() { console.log('bobbyhadz.com'); } } const p = new Person('Bobby hadz', 30) p.someMethod();
将我们的代码移动到类方法中解决了错误。
函数的缺失实现
缺少第二个示例中函数的实现。
索引.ts
// ⛔️ Error: Function implementation is missing or not immediately following the declaration.ts(2391) function sum(a: number, b: number): number;
要解决该错误,请在键入函数时声明类型别名,并单独声明实现。
索引.ts
type Sum = (a: number, b: number) => number; const sum: Sum = (a: number, b: number) => { return a + b; };
我们使用类型别名来键入sum
函数。
错误已解决,因为我们在函数声明后立即为其提供了实现。
我还写了一篇关于
函数重载如何在 TS 中工作的详细指南。
在抽象类中声明一个没有实现的方法
如果您在抽象类中声明一个没有实现的方法,您也可能会遇到错误。
索引.ts
abstract class Employee { abstract salary: number; // ⛔️ Error: Function implementation is missing or not immediately following the declaration.ts(2391) increaseSalary(): number; }
要解决这种情况下的错误,我们要么必须在方法前加上关键字abstract
,要么为该方法提供一个实现。
索引.ts
abstract class Employee { abstract salary: number; // ✅ this works abstract increaseSalary(): number; }
或者,您可以提供该方法的实现。
索引.ts
abstract class Employee { abstract salary: number; increaseSalary(): number { return this.salary + 100; } }
TypeScript 中的抽象类:
- 不能用于直接创建对象——不能使用
new
关键字直接实例化抽象类。 - 只能作为父类。
- 可以包含方法和属性的实际实现,其中实现的方法可以引用抽象属性/方法。
- 可以让子类承诺实现父类定义的抽象方法/属性。
如果多次为具有相同名称的函数定义实现,则会出现
Duplicate function implementation
错误。