我的 TypeScript class 未定义。我如何解决它?

My TypeScript class is not defined. How do i fix it?

我最近开始涉足 TypeScript 的世界。我的目标是创建一个简单的游戏,同时利用 面向对象编程 。在开始我的第一个 TypeScript 项目时,我已经遇到了一个我不确定如何解决的问题。有人可以帮我吗?

这是我第一个 class 开始的游戏。如您所见,class 'Game' 中没有太多内容,但这里的问题是 class 'Level' 导致 未定义。

import { Level } from "./level.js"

class Game {
    
    private levels : Level[] 
    constructor() {
        //Level 1: using the word 'Bus'
        let level1 = new Level("B_s", "u", ["a", "u", "o", "i"])

        //Push the first level to an array
        this.levels.push(level1)
    }
}

new Game()

这是等级class:

export class Level {
    private word : string 
    private correctAnswer : string
    private possibilities : string[]
    /* Optional
        private score : number
        private difficulty : number */

    constructor(w : string, c : string, p : string[]) {
        this.word           = w
        this.correctAnswer  = c
        this.possibilities  = p
    }
}

我很确定导出和导入的记录是正确的,但我可能漏掉了什么。

首先,import { Level } from "./level.js"看起来不对。您应该将 TypeScript 文件定义为 *.ts。此外,您应该避免在导入中使用文件扩展名:import { Level } from './level';

正如@jtbandes 提到的,levels 属性 没有被初始化。

// game.ts
import { Level } from './level';
export class Game {
  private levels: Level[];
  constructor() {
    this.levels = [];
    const level = new Level(/* ... */);
    this.levels.push(level);
  }
}

或在其定义中初始化关卡属性。我倾向于反对这一点,因为就个人而言,我喜欢在构造函数中初始化属性,这允许在构造函数中进行有趣的重载,而无需 属性 具有默认值(轻微的 运行-time 优化)。

export class Game {
  private levels: Level[] = [];
  // ...
}

您的 tsconfig.json(即 include 数组)中可能还有一些错误的配置,但对于实际的 TypeScript 代码,这些是最突出的事情。

旁白

作为个人风格的选择,我喜欢用 class 的大小写来定义 class 文件,即 Game.tsLevel.ts