ふと気になる TypeScript のコードを見かけたので実験してみる。
class Message { readonly message: string; constructor(message: string) { this.message = message; } } class Messenger { private readonly message: Message; constructor(message: Message) { this.message = message || new Message('Hello'); } public sayMessage(): void { console.log(this.message.message); } public overrideMessage(message: Message): void { (this.message as Message) = message; } } let messenger = new Messenger(null); messenger.sayMessage(); messenger.overrideMessage(new Message('Hi!')); messenger.sayMessage();
という感じの実装をして実行すると
$ node_modules/typescript/bin/tsc hello.ts $ node hello.js Hello Hi!
となる。(this.message as Message)
とすることで readonly
なメンバを上書きできると。なんか C++ の mutable
を思い出す。それにしてもこんなにガチガチに型を書くなら JavaScript 的なやつでなくてもいいなぁ・・・って気になってくる。
トランスパイルして得た .js を眺めると jQuery を思い出すなぁ・・・。