MST

星途 面试题库

面试题:TypeScript名字空间的嵌套与导出

假设你正在开发一个游戏模块,使用TypeScript的名字空间来组织代码。创建一个名为`Game`的名字空间,在`Game`名字空间中嵌套一个`Characters`名字空间和一个`Maps`名字空间。在`Characters`名字空间中定义一个抽象类`Character`,具有属性`health`(数字类型)和抽象方法`attack`。然后在`Characters`名字空间下再嵌套一个`Warrior`名字空间,在`Warrior`名字空间中定义一个类`Knight`继承自`Character`,实现`attack`方法,该方法在调用时会减少自身`health` 10点并返回`'Attacking!'`。在`Maps`名字空间中定义一个接口`Map`,具有属性`name`(字符串类型)和`size`(数字类型)。请展示如何正确导出和使用这些类、接口,确保代码结构清晰,符合模块化开发规范。
28.0万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
// 定义Game命名空间
namespace Game {
    // 定义Characters命名空间
    namespace Characters {
        // 定义抽象类Character
        export abstract class Character {
            public health: number;
            constructor(health: number) {
                this.health = health;
            }
            // 定义抽象方法attack
            public abstract attack(): string;
        }
        // 定义Warrior命名空间
        namespace Warrior {
            // 定义Knight类继承自Character
            export class Knight extends Character {
                public attack(): string {
                    this.health -= 10;
                    return 'Attacking!';
                }
            }
        }
    }
    // 定义Maps命名空间
    namespace Maps {
        // 定义Map接口
        export interface Map {
            name: string;
            size: number;
        }
    }
}

// 使用方式示例
// 导入Knight类
import { Knight } from './Game/Characters/Warrior';
// 导入Map接口
import { Map } from './Game/Maps';

// 创建Knight实例
const knight = new Knight(100);
console.log(knight.attack());
console.log(knight.health);

// 定义实现Map接口的对象
const myMap: Map = {
    name: 'Example Map',
    size: 1000
};
console.log(myMap.name);
console.log(myMap.size);