在你的代码中,Employee 类继承了抽象类 People,但没有实现 People 类中声明的抽象属性 name。在 TypeScript 中,如果一个类继承了一个抽象类,那么它必须实现抽象类中声明的所有抽象属性和方法。

在你的代码中,你在 Employee 类的构造函数中调用了 super(name),这实际上是在设置 People 类的 name 属性,而不是 Employee 类的 name 属性。然后,当你调用 john.say('Hello, ') 时,this.name 实际上是访问的 Employee 类的 name 属性,而这个属性在 Employee 类的构造函数中并没有被设置,所以它的值是 undefined

要解决这个问题,你需要在 Employee 类中实现 name 属性。以下是修正后的代码:

abstract class People {
    abstract name: string;
    abstract say(msg: string): string;
    protected constructor(name: string) {
        this.name = name;
    }
}
 
class Employee extends People {
    name: string;
    constructor(name: string) {
        super(name);
        this.name = name; //如果不赋值的话,实则在设置People的name属性,而非Employee的name属性,所以会显示undefined 2024-06-30 17:23:57
    }
    say(msg: string): string {
        return `${msg} ${this.name}`;
    }
}
 
let john = new Employee('John');
console.log(john.say('Hello, ')); // 输出:Hello, John

在这段代码中,Employee 类实现了 People 类的 name 属性,并在构造函数中对它进行了初始化。