現在、TypeScript を使用して Angular 2 のデモを実行しています。テンプレートとしてインポートされる index.html ファイルと TypeScript ファイルの 2 つのファイルがあります。TypeScript ファイルはpomodoro-timer.jsにコンパイルされます。このデモでは、すべてのクラスが 1 つのファイルに含まれています。
pomodoro-timer.ts
import {
Component,
Input,
Pipe,
PipeTransform,
Directive,
OnInit,
HostListener
} from '@angular/core';
import { bootstrap } from '@angular/platform-browser-dynamic';
/// Model interface
interface Task {
name: string;
deadline: Date;
queued: boolean;
pomodorosRequired: number;
}
/// Local Data Service
class TaskService {
public taskStore: Array<Task> = [];
constructor() {
const tasks = [
{
name: "Code an HTML Table",
deadline: "Jun 23 2015",
pomodorosRequired: 1
},
{
name: "Sketch a wireframe for the new homepage",
deadline: "Jun 24 2016",
pomodorosRequired: 2
},
{
name: "Style table with Bootstrap styles",
deadline: "Jun 25 2016",
pomodorosRequired: 1
},
{
name: "Reinforce SEO with custom sitemap.xml",
deadline: "Jun 26 2016",
pomodorosRequired: 3
}
];
this.taskStore = tasks.map(task => {
return {
name: task.name,
deadline: new Date(task.deadline),
queued: false,
pomodorosRequired: task.pomodorosRequired
};
});
}
/// Component classes
/// - Main Parent Component
@Component({
selector: 'pomodoro-tasks',
styleUrls: ['pomodoro-tasks.css'],
templateUrl: 'pomodoro-tasks.html'
})
class TasksComponent {
today: Date;
tasks: Task[];
constructor() {
const TasksService: TasksService = new TasksService();
this.tasks = taskService.taskStore;
this.today = new Date();
}
};
bootstrap(TasksComponent);
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Hello Angular 2!</title>
<!-- required stylesheets -->
<link rel="stylesheet" href="node_modules/bootstrap/dist/css/bootstrap.min.css" />
<!-- required javascripts -->
<script src="node_modules/es6-shim/es6-shim.min.js"></script>
<script src="node_modules/zone.js/dist/zone.js"></script>
<script src="node_modules/reflect-metadata/Reflect.js"></script>
<script src="node_modules/systemjs/dist/system.js"></script>
<script src="node_modules/rxjs/bundles/Rx.js"></script>
<script src="systemjs.config.js"></script>
<script>
// importation of component module
// with no file extension
System.import('built/pomodoro-tasks').then(null, console.error.bind(console));
</script>
</head>
<body>
<nav class="navbar navbar-default navbar-static-top">
<div class="container">
<div class="navbar-header">
<strong class="navbar-brand">My Pomodoro Tasks</strong>
</div>
</div>
</nav>
<pomodoro-tasks></pomodoro-tasks>
</body>
</html>
すべて正常に動作しているように見えますが、 pomodoro-timer.tsファイルのこの部分でエラーが発生しているようです。
class TasksComponent {
today: Date;
tasks: Task[];
constructor() {
// (Cannot find name 'TasksService'.at line 91 col 29, BELOW)
// (Block-scoped variable 'TasksService' used before its declaration.at line 91 col 48, BELOW)
const TasksService: TasksService = new TasksService();
// (Cannot find name 'taskService'.at line 92 col 22, BELOW)
this.tasks = taskService.taskStore;
this.today = new Date();
}
};
bootstrap(TasksComponent);
TypeScript に精通している人なら、なぜこれらのエラーが発生するのか分かりますか? TypeScript プラグインで Atom IDE を使用しています。