TypeScriptは業務で使っているが、脳内バージョンは2.x系で最新情報を追ってこなかった。その弊害として、never型とunknown型の意味がわからず、void/anyと何が違うの?状態だった。
そこで当記事ではvoidとnever、anyとunknownのそれぞれの型の特徴を一言、二言で表し比較する。
2019/09/10
2018/03/06
JavaScriptとTypeScriptを共存させ、段階的に移行する方法
Labels:
JavaScript
,
TypeScript
某サービスのフロントエンド開発に携わるようになってからずっと考えていることがある。
TypeScriptに移行して、型に守られたい!
ただ稼働しているサービスをいっきにTypeScriptに移行するのは危険で膨大な工数がかかるため、段階的に移行できないかと考えた。
ということでJavaScriptとTypeScriptを共存させる方法をまとめる。
環境は以下のとおり。
→ 2018/03/23 追記しました
TypeScriptに移行して、型に守られたい!
ただ稼働しているサービスをいっきにTypeScriptに移行するのは危険で膨大な工数がかかるため、段階的に移行できないかと考えた。
ということでJavaScriptとTypeScriptを共存させる方法をまとめる。
環境は以下のとおり。
- webpack@4.0.1
- webpack-cli@2.0.9
- webpack v3系の場合は不要
- typescript@2.7.2
- ts-loader@4.0.0
→ 2018/03/23 追記しました
2017/10/18
vue2.5でTypeScript統合が改善されthisが推論されるようになったので試してみた
Labels:
JavaScript
,
TypeScript
,
Vue.js
,
フレームワーク
2017年10月13日に、ついにvue 2.5(コードネーム: Level E)がリリースされた。
今回のリリースの目玉はなんといってもTypeScript統合の改善! TypeScriptのアップデートにともない、vueの憎きオブジェクトリテラルの中で、なんと「thisが推論される」ようになったのだ!
vue 2.4以前は、vue-class-componentのデコレータを使いクラスベースで実装しなければならなかったのが、vue 2.5からはvue.jsのAPIのままTypeScriptで開発できるようになった。
vue 2.4以前のTypeScriptでの開発については、以下の記事を参照してほしい。
ということで、今回はvue 2.5を使ってTypeScriptで実装する方法をまとめる。
ついでにvue 2.4から2.5へのアップデート方法もまとめる。
実装するにあたりハマった点があるので、参考になればと思う。
今回のリリースの目玉はなんといってもTypeScript統合の改善! TypeScriptのアップデートにともない、vueの憎きオブジェクトリテラルの中で、なんと「thisが推論される」ようになったのだ!
vue 2.4以前は、vue-class-componentのデコレータを使いクラスベースで実装しなければならなかったのが、vue 2.5からはvue.jsのAPIのままTypeScriptで開発できるようになった。
vue 2.4以前のTypeScriptでの開発については、以下の記事を参照してほしい。
ということで、今回はvue 2.5を使ってTypeScriptで実装する方法をまとめる。
ついでにvue 2.4から2.5へのアップデート方法もまとめる。
実装するにあたりハマった点があるので、参考になればと思う。
Labels:
JavaScript
,
TypeScript
,
Vue.js
,
フレームワーク
2017/09/21
vue-cliを使ってとにかく楽してVue.jsでTypeScriptを使いたい
2年以上前にVue.jsでTypeScriptを使ってChrome拡張機能をつくった経験がある。
フロントエンドについて学びはじめた頃なのでTypeScriptはv1.4、Vue.jsはv0.11とかそんな時代。当時、相当苦労した思い出がある。
今では、Vue.jsも公式で型定義を提供している。TypeScriptのサポートも手厚くなり、型のある環境での開発が楽になっているらしいが……。
だから、とにかく楽したい!!!
かといって、いわゆるget startedのような最小構成にはしたくない。
ということで、vue-cliのwebpackテンプレートをベースに、とにかく楽してVue.jsプロジェクトでTypeScriptを使えるようにする。
環境は以下のとおり。
vue2.5以降でvue-class-componentのデコレータを使わない方法は、以下の記事を参照ください。
フロントエンドについて学びはじめた頃なのでTypeScriptはv1.4、Vue.jsはv0.11とかそんな時代。当時、相当苦労した思い出がある。
今では、Vue.jsも公式で型定義を提供している。TypeScriptのサポートも手厚くなり、型のある環境での開発が楽になっているらしいが……。
- gulp書きたくない
- webpack触りたくない
- *-loaderの設定したくない
- その他細かな設定をしたくない
だから、とにかく楽したい!!!
かといって、いわゆるget startedのような最小構成にはしたくない。
ということで、vue-cliのwebpackテンプレートをベースに、とにかく楽してVue.jsプロジェクトでTypeScriptを使えるようにする。
環境は以下のとおり。
- Mac OSX
- npm v5.3.0
- vue-cli v2.8.2
- vue.js v2.4.2
- typescript v2.4.2
vue2.5以降でvue-class-componentのデコレータを使わない方法は、以下の記事を参照ください。
Labels:
TypeScript
,
Vue.js
2017/05/12
TypeScript + express-openapiでOpenAPI(Swagger)準拠のRESTful APIをつくる
Labels:
JavaScript
,
TypeScript
,
フレームワーク
仕事でOpen API(旧Swagger)について調べる機会があった。せっかくなのでNode.jsでOpen APIに準拠したRESTful APIをつくろうと思う。
今回はexpress-openapiというフレームワークを使う。Express.jsを拡張し、スキーマのバリデーションをしてくれたり、コードを管理しやすくしてくれたりする。また、標準でTypeScriptをサポートしているので、チーム開発にも向いている。
使う環境やフレームワークは以下のとおり。
今回はexpress-openapiというフレームワークを使う。Express.jsを拡張し、スキーマのバリデーションをしてくれたり、コードを管理しやすくしてくれたりする。また、標準でTypeScriptをサポートしているので、チーム開発にも向いている。
使う環境やフレームワークは以下のとおり。
- Node.js: 6.10.2
- TypeScript: 2.2.2
- express: 4.15.2
- express-openapi: 0.35.0
Labels:
JavaScript
,
TypeScript
,
フレームワーク
2017/05/11
ORMをTypeScriptでサクッと実装するならtypeormがオススメ
Labels:
JavaScript
,
SQLite
,
TypeScript
久しぶりにTypeScriptを書いて型のある喜びを感じていた。そして以前使っていたSequelizeをTypeScriptで使ってみようと思ったのだが、深淵を覗いてしまったようだ。
Sequelizeは高機能で便利なのだが、これをTypeScriptで書こうとするとかなりツライそうだ。実際の使い方は以下の記事を参照ください。
TypeScriptで素直に書けるORMはないかな?と探したところ、typeormを見つけた。
typeormは、MySQLをはじめ、PostgreSQL、MariaDB、SQLite3、MS SQL Server、Oracle、WebSQL databaseと主要なデータベースをカバーしている。
また、ライブラリ自体がTypeScriptで書かれているため、デコレータなどを使ってサクッと実装することができる。
今回は、手っ取り早く試したいのでSQLite3で使ってみる。
Sequelizeは高機能で便利なのだが、これをTypeScriptで書こうとするとかなりツライそうだ。実際の使い方は以下の記事を参照ください。
TypeScriptで素直に書けるORMはないかな?と探したところ、typeormを見つけた。
typeormは、MySQLをはじめ、PostgreSQL、MariaDB、SQLite3、MS SQL Server、Oracle、WebSQL databaseと主要なデータベースをカバーしている。
また、ライブラリ自体がTypeScriptで書かれているため、デコレータなどを使ってサクッと実装することができる。
今回は、手っ取り早く試したいのでSQLite3で使ってみる。
Labels:
JavaScript
,
SQLite
,
TypeScript
2016/02/27
TypeScriptのtsdがオワコンになったのでtypingsを使ってみた
Labels:
TypeScript
photo by Daniel Foster
TypeScriptでの型定義管理で使っていたtsdがオワコンになった。
代わりに typings を使ってくれとのこと。
▶ Deprecate TSD · Issue #269 · DefinitelyTyped/tsd
ということで、typingsを使ってみた。
詳しいTypeScriptの開発環境構築は以下のエントリを参照してほしい。
TypeScriptでの型定義管理で使っていたtsdがオワコンになった。
代わりに typings を使ってくれとのこと。
▶ Deprecate TSD · Issue #269 · DefinitelyTyped/tsd
ということで、typingsを使ってみた。
開発環境
- Mac OS X Yosemite
- npm 3.3.12
- typings 0.6.8
詳しいTypeScriptの開発環境構築は以下のエントリを参照してほしい。
2015/07/12
X動画Sの視聴履歴を管理するChrome拡張機能『XHISTORYS』
Labels:
Chrome
,
JavaScript
,
TypeScript
※ Google先生、この記事はアダルト系じゃないですよ!ホントです、ごめんなさい。
※ 読んでくださる皆様、X動画SはGoogle先生対策です。お手数ですが、某動画サイトだと読み替えてください。
X動画Sの視聴履歴を管理するChrome拡張機能『XHISTORYS』のアルファ版をリリースした。
※ 読んでくださる皆様、X動画SはGoogle先生対策です。お手数ですが、某動画サイトだと読み替えてください。
X動画Sの視聴履歴を管理するChrome拡張機能『XHISTORYS』のアルファ版をリリースした。
Labels:
Chrome
,
JavaScript
,
TypeScript
2015/06/25
【JavaScript】コールバックが終わるまで処理を遅延させる方法
Labels:
JavaScript
,
TypeScript
photo by Nicholas D.
自分用に作ったIndexedDBライブラリをテストしようとしたときの話。
以下のような手順で、テストを書いていた。
問題は「2.データの登録」で発生した。
エラーの内容は、「データベースがまだ作成されていません」的なものだった。
それを解消するために、いろいろ調べたのでまとめていく。
自分用に作ったIndexedDBライブラリをテストしようとしたときの話。
以下のような手順で、テストを書いていた。
- データベースの作成
- データの登録
- データの検索
- 以下略
問題は「2.データの登録」で発生した。
エラーの内容は、「データベースがまだ作成されていません」的なものだった。
それを解消するために、いろいろ調べたのでまとめていく。
2015/05/27
【TypeScript】MVVMなVue.jsを使ってToDoアプリをつくってみた
Labels:
JavaScript
,
TypeScript
,
Vue.js
,
フレームワーク
今まで素のJavaScriptとAngularJSを使って、Todoアプリをつくった。
素のJavaScriptはとにかくコード量が多くなって面倒。
AngularJSは学習コストが高く、AngularJS2.0になると別モノになってしまう。
とにかく手軽にアプリが作れるフレームワークを、と探したところにMVVMフレームワークの「Vue.js」を見つけた。
ググるとなにかと「お手軽」というキーワードが目についたので、実際に使ってみた。
できあがったモノは、以下のサイトで触れる。
ToDoアプリ自体は、以下の2つのエントリとほとんど同じ。
素のJavaScriptはとにかくコード量が多くなって面倒。
AngularJSは学習コストが高く、AngularJS2.0になると別モノになってしまう。
とにかく手軽にアプリが作れるフレームワークを、と探したところにMVVMフレームワークの「Vue.js」を見つけた。
ググるとなにかと「お手軽」というキーワードが目についたので、実際に使ってみた。
できあがったモノは、以下のサイトで触れる。
ToDoアプリ自体は、以下の2つのエントリとほとんど同じ。
Labels:
JavaScript
,
TypeScript
,
Vue.js
,
フレームワーク
2015/05/26
tsdが「an error occured!」とエラーを吐いたときの対処方法
Labels:
TypeScript
TypeScriptの型定義ファイル管理ツールの「tsd」を使おうとしたときに、
このときの対処法をまとめる。
an error occured! SyntaxError
というエラーを吐いた。このときの対処法をまとめる。
顛末
- 開発環境構築メンドーだから前使ったやつコピーしよう
- 「tsd.json」に書かれている不要な型定義ファイル消そう
… installed内に追加されている型定義ファイルを削除 - 必要な型定義ファイルをインストールしよう
> tsd query hoge
an error occured!
ファッ!?
2015/05/20
はじめてのTypeScript開発環境構築(gulp, bower, webpack, tsd, npm)
Labels:
JavaScript
,
Tools
,
TypeScript
TypeScriptで開発しようとしたとき、いろんな問題にぶつかった。
もともとSIerではVisual Studioさえあればなんとかなる環境で育ってきたため、Web系のさまざまなツールを導入する上で何度も挫折した。
ということで、初心者(私)が初心者向けに「はじめてTypeScriptの開発環境(gulp + bower + webpack + tsd + npm)を構築するときの手順とポイント」についてまとめていこうと思う。
ツールの使い方間違っているよなどの指摘がありましたら、コメントやTwitterで教えてください。
追記: 2016/09/26
1年前の記事だが、すでにオワコンになっているツールもあるので注意。
当記事内では、tsdとbowerがオワコンになっている。
tsdはtypingsにかわった。bowerはnpmに統合する流れになっている。
もともとSIerではVisual Studioさえあればなんとかなる環境で育ってきたため、Web系のさまざまなツールを導入する上で何度も挫折した。
ということで、初心者(私)が初心者向けに「はじめてTypeScriptの開発環境(gulp + bower + webpack + tsd + npm)を構築するときの手順とポイント」についてまとめていこうと思う。
ツールの使い方間違っているよなどの指摘がありましたら、コメントやTwitterで教えてください。
この記事の目標
- TypeScriptで開発したい
- ライブラリも使いたい(今回はjQueryを例にする)
- Web界隈のツールにも慣れたい
使用するツール(ツール名 - バージョン)
- node - 0.12.0
- npm - 2.5.1
- tsd - 0.5.7
- bower - 1.4.1
- gulp - 3.8.11
- gulp-typescript - 2.7.5
- gulp-webpack - 1.4.0
- WebPack - 1.8.11
- ts-loader - 0.4.2
追記: 2016/09/26
1年前の記事だが、すでにオワコンになっているツールもあるので注意。
当記事内では、tsdとbowerがオワコンになっている。
tsdはtypingsにかわった。bowerはnpmに統合する流れになっている。
長くなりそうなので目次
- node.js / npm のインストール
- tsd のインストール
- bower のインストール
- gulp のインストール
- WebPack について
- 開発環境の初期化
- ライブラリ(jQuery)の取得 + 型定義ファイルの取得
- TypeScriptでなんか書いてみる
- gulp で使うプラグインのインストール
- webpack のインストールと設定
- gulpfile.jsの作成と実行
- できたファイルを実行してみる
- gitignoreファイルの作成
- さいごに
- 参考サイト
Labels:
JavaScript
,
Tools
,
TypeScript
2015/04/29
【超訳】CodingDojo:連想配列による文字列置換(KataDictionaryReplacer)
Labels:
CodeKata
,
JavaScript
,
TypeScript
photo by François Philipp
CodingDojoの第2弾ということで、KataDictionaryReplacer(連想配列による文字列置換)をやってみた。
このカタは、簡単な文字列置換だ。
Corey Hainesのプレゼン(LT)を聞いて思いついた。
引数が文字列と連想配列のメソッドをつくる。
そして、$で囲まれているキーと、それに対応する連想配列の値を置換する。
CodingDojoの第2弾ということで、KataDictionaryReplacer(連想配列による文字列置換)をやってみた。
KataDictionaryReplacer
このカタは、簡単な文字列置換だ。
Corey Hainesのプレゼン(LT)を聞いて思いついた。
仕様
引数が文字列と連想配列のメソッドをつくる。
そして、$で囲まれているキーと、それに対応する連想配列の値を置換する。
Labels:
CodeKata
,
JavaScript
,
TypeScript
2015/04/28
【atom-typescript】ファイルパス指定でnot foundエラーになったときの対処法
VisualStudioを卒業して、AtomでTypeScriptを開発するために「atom-typescript」というPackageを導入したときの話。
TypeScriptで型定義やファイルを参照するときに「<reference path=”./foo/bar.d.ts”>」や「import hoge = require(“./foo/bar”)」のように書く。
このときに、実際に指定したパスにファイルが存在しているにも関わらず、「File './foo/bar.d.ts' not found.」というエラーが発生する場合がある。
そのときの対処方法をまとめる。
TypeScriptで型定義やファイルを参照するときに「<reference path=”./foo/bar.d.ts”>」や「import hoge = require(“./foo/bar”)」のように書く。
このときに、実際に指定したパスにファイルが存在しているにも関わらず、「File './foo/bar.d.ts' not found.」というエラーが発生する場合がある。
そのときの対処方法をまとめる。
Labels:
Tips
,
TypeScript
2015/04/27
【超訳】CodingDojo:アラビア数字をローマ数字に変換(KataRomanNumerals)
Labels:
CodeKata
,
JavaScript
,
TypeScript
photo by Paul L Dineen
CodingDojoの第3弾ということで、KataRomanNumerals(アラビア数字をローマ数字に変換する)をやってみた。
ローマ人は頭いいやつばかりだ。だから何百年もヨーロッパを支配していた。
コンクリートやまっすぐな道、ビキニを発明したんだけど、発見できなかったものもあった。
それが数字のゼロ。
CodingDojoの第3弾ということで、KataRomanNumerals(アラビア数字をローマ数字に変換する)をやってみた。
KataRomanNumerals
ローマ人は頭いいやつばかりだ。だから何百年もヨーロッパを支配していた。
コンクリートやまっすぐな道、ビキニを発明したんだけど、発見できなかったものもあった。
それが数字のゼロ。
Labels:
CodeKata
,
JavaScript
,
TypeScript
2015/04/22
【超訳】CodingDojo:ボウリングのスコア計算
Labels:
CodeKata
,
JavaScript
,
TypeScript
前回のCode Kataについて紹介した。
今回は、Coding DojoのKataCatalogueから「KataBowling:ボウリングのスコア計算」をやってみた。
これまたすべて英語なので、練習がてら翻訳した内容をまとめていく。
※ 英語は苦手なので、最低限意味がわかる程度に超訳した。
今回は、Coding DojoのKataCatalogueから「KataBowling:ボウリングのスコア計算」をやってみた。
これまたすべて英語なので、練習がてら翻訳した内容をまとめていく。
※ 英語は苦手なので、最低限意味がわかる程度に超訳した。
Labels:
CodeKata
,
JavaScript
,
TypeScript
2015/04/21
【超訳】CodeKata2:Karate Chop(ソースコード付)
Labels:
CodeKata
,
JavaScript
,
TypeScript
photo by sean dreilinger
「TypeScript実践プログラミング」を読んで、Code Kata(http://codekata.com/)という存在を知り、早速試してみた。
ちなみにCode KataのKataは、空手や柔道の「形(Kata)」からきている。
決められた形を何度も練習することで、プログラミングの基本を覚える。そして、実践で使えるようにするのがCode Kataの目的。
見ての通り、すべて英語。しかも日本語訳サイトが少ない。
ということで、CodeKataの練習がてら翻訳した内容をまとめていく。
※ 英語は苦手なので、最低限意味が分かる程度に超訳した。
今回は、Kata02の「Karate Chop(空手チョップ)」について書いていく。
「TypeScript実践プログラミング」を読んで、Code Kata(http://codekata.com/)という存在を知り、早速試してみた。
ちなみにCode KataのKataは、空手や柔道の「形(Kata)」からきている。
決められた形を何度も練習することで、プログラミングの基本を覚える。そして、実践で使えるようにするのがCode Kataの目的。
見ての通り、すべて英語。しかも日本語訳サイトが少ない。
ということで、CodeKataの練習がてら翻訳した内容をまとめていく。
※ 英語は苦手なので、最低限意味が分かる程度に超訳した。
今回は、Kata02の「Karate Chop(空手チョップ)」について書いていく。
Labels:
CodeKata
,
JavaScript
,
TypeScript
2015/04/20
TypeScript+Jasmineでテスト駆動開発(ビヘイビア駆動開発)をする
Labels:
JavaScript
,
TypeScript
,
フレームワーク
膨大なユニットテストを手動でやりたくないし、リグレッションテスト(回帰テスト)も面倒で、テストの自動化をしたい。
ということで、JavaScriptのテストフレームワーク「Jasmine」をつかったテスト駆動開発(ビヘイビア駆動開発)をやってみた。
開発環境と各種バージョンは、以下の通り。
追記:2015/06/07
bowerやtsdを使うともっと簡単にJasmineとその型定義ファイルをダウンロードすることができる。
詳しくは、以下のエントリで。
ということで、JavaScriptのテストフレームワーク「Jasmine」をつかったテスト駆動開発(ビヘイビア駆動開発)をやってみた。
開発環境と各種バージョンは、以下の通り。
- Visual Studio Community 2013
- TypeScript
- Jasmine 2.2(現時点での最新版)
追記:2015/06/07
bowerやtsdを使うともっと簡単にJasmineとその型定義ファイルをダウンロードすることができる。
詳しくは、以下のエントリで。
Labels:
JavaScript
,
TypeScript
,
フレームワーク
2015/04/08
素のJavaScript(TypeScript)でMVCモデルのToDoアプリをつくってみた
Labels:
JavaScript
,
TypeScript
,
フレームワーク
photo by Sébastien Barré
AngularJSやBackbone、KnockoutJSといったMV*フレームワークや、ReactといったVに特化したフレームワーク、jQueryといったライブラリがいっぱいある。
AngularJSを勉強し始めたは良いが、2.0になると全く別モノになってしまうなど、どれを勉強すればよいかわからなくなってしまった。
ということで、まずはフレームワークやライブラリを使わない「素のJavaScript」でMVCモデルを勉強してみようと思った。
つくったToDoアプリの概要は、前回の「TypeScript + AngularJSでToDoアプリをつくってみた」と同じだ。
※ 以降TypeScriptで記載しているが、JavaScriptのソースが見たい方はGitHubにコンパイル後のソースを置いてあるので、そちらを参照ください。
AngularJSやBackbone、KnockoutJSといったMV*フレームワークや、ReactといったVに特化したフレームワーク、jQueryといったライブラリがいっぱいある。
AngularJSを勉強し始めたは良いが、2.0になると全く別モノになってしまうなど、どれを勉強すればよいかわからなくなってしまった。
ということで、まずはフレームワークやライブラリを使わない「素のJavaScript」でMVCモデルを勉強してみようと思った。
つくったToDoアプリの概要は、前回の「TypeScript + AngularJSでToDoアプリをつくってみた」と同じだ。
※ 以降TypeScriptで記載しているが、JavaScriptのソースが見たい方はGitHubにコンパイル後のソースを置いてあるので、そちらを参照ください。
Labels:
JavaScript
,
TypeScript
,
フレームワーク
2015/04/04
TypeScript+AngularJSでToDoアプリをつくってみた
Labels:
JavaScript
,
TypeScript
,
フレームワーク
Webアプリを作ってるときに、素のJavaScriptではどうもソースコードが汚くなってしまった。
「ソースコードには人格がでる」と思っているので、キレイに、かつ簡単に書きたい。
ということでAngularJSというMVC(MVW)フレームワークを使ってみた。
参考にしたTodoアプリは、ドットインストールの「AngularJSで作るToDoアプリ」を基にした。
詳細な説明については、ドットインストールを参照してほしい。
「ソースコードには人格がでる」と思っているので、キレイに、かつ簡単に書きたい。
ということでAngularJSというMVC(MVW)フレームワークを使ってみた。
参考にしたTodoアプリは、ドットインストールの「AngularJSで作るToDoアプリ」を基にした。
詳細な説明については、ドットインストールを参照してほしい。
Labels:
JavaScript
,
TypeScript
,
フレームワーク
登録:
投稿
(
Atom
)