SlideShare a Scribd company logo
型定義ファイルのある開発
TypeScript勉強会 VSハッカソン倶楽部
@vvakame
わかめ まさひろ
GAE
Android
TypeScript
AngularJS
@vvakame
• Google App Engine!
• Android!
• Google Apps!
などなど、!
!
!
技術に特化した会社です。!
Microsoft?
宣伝
TypeScriptリファレンス
紙・電子共 好評発売中!
Amazon(紙, Kindle)
達人出版会(PDF)
おさらい:TypeScriptの特長
TypeScriptチートシート
goo.gl/QiXe8t
TypeScriptの特長
• TypeScriptはJavaScriptを拡張した言語!
• 静的型付け!!
• ECMAScript 6規格の文法を先取り☆!
• 読みやすい変換後JavaScript!
• Java, C# とかに優しい言語仕様!
• 長いコンパイル時間
最も現実的なaltJSだ!
TypeScriptといえば…
静的型付
0
12.5
25
37.5
50
人数
型は必要 型は不要
型は必要!
出典:民明書房 - 激烈!天下一altJS武闘会 - より
Why needs 型?
• 多くのエラーをコンパイル時に!
• 実行時エラーはもううんざり!!
• 間違った使い方は不可能に!
• リファクタリングも安心確実!!
• コンパイルが通ればある程度動く!!
• IDEなどのサポートが得られやすい
JS完全互換!
TypeScriptでの型
• primitive type 御三家!
• number!
• string!
• boolean
JS完全互換!
TypeScriptでの型
• 忘れちゃならない!
• any!
• void
JS完全互換!
TypeScriptでの型
• class!
• 実体も型も存在するイケメン!
• interface!
• 地味 型しか存在しない!
• object type literal!
• ↑TypeScriptリファレンス参照!
• 雑に説明すると即興interface
module君も一応いる
TypeScriptでの型
• ECMAScriptにいるやつ!
• DateとかArrayとかFunctionとか!
• ブラウザにいるやつ!
• windowとかDOM系のやつとか
↑結局classかinterface
TypeScript & JavaScript
• JSのライブラリが使いたい!!
• jQuery!
• AngularJS!
• mocha!
• etc…!
• お任せください!
@Neri78さんの
解説を思い出そう!
DefinitelyTyped
definitely/déf(ə)nətli/
→define
副詞more ∼; most ∼
2 明確に, はっきりと〈断る述べる決めるなど〉.
type/ta p/
語源は「打ってできた形型」
(形)typical, (副)typically
名詞複∼s/-s/
1 C(ある特性を共有する)型, タイプ, 類型; 種類(kind2, sort)
ウィズダム英和辞典より
I’m committer!
definitelytyped.org
github.com/borisyankov/DefinitelyTyped
型定義ファイル .d.ts
Over 450!
interface Moment {
!
format(format: string): string;
format(): string;
!
fromNow(withoutSuffix?: boolean): string;
!
startOf(soort: string): Moment;
endOf(soort: string): Moment;
!
add(input: MomentInput): Moment;
add(soort: string, aantal: number): Moment;
add(duration: Duration): Moment;
subtract(input: MomentInput): Moment;
subtract(soort: string, aantal: number): Moment;
!
calendar(): string;
clone(): Moment;
!
valueOf(): number;
!
local(): Moment; // current date/time in local mode
!
utc(): Moment; // current date/time in UTC mode
!
既存JSに型を後付けする
http://momentjs.com/
goo.gl/9QnuC3
型定義ファイルの探し方
DefinitelyTypedで探す
• github.com/borisyankov/DefinitelyTyped!
• GitHub!
• t キーで頑張る!
• tsd!
• definitelytyped.org/tsd/!
• NuGet!
• www.nuget.org/packages?
q=DefinitelyTyped
世界貢献!
.d.ts 利用例
• FunScript!
• F# to JavaScript!
• Scala.js!
• scala.js ts importer!
• dts-parser!
• TypedCoffeeScript by mizchi
in Pure JavaScript
• WebStorm (JetBrains社のIDE)!
• 通常のJSコード書きにも使える!!
• JavaScript > Libraries > Download > 

TypeScript community stubs
.d.ts = 大統一型定義ファイル
•つよい!!
•すごい!!
•やばい!
是非
• TypeScript固有の事情が入るよね!
• WebIDLとか使ったほうがよくね?!
• しかし、多くの人は今すぐ使いたい!
• DefinitelyTyped、450もあるらしっすよ!
• ↑大正義
より良い解が見つかるといいな
まとめ
↓ JavaScriptより強い安全性を求め!
↓ 静的型チェックのない世界殺すマン!
↓ しかし既存JS資産は活用したい…!
↓ 型定義ファイル、必要です!!
↓ それ、DefinitelyTypedにあるよ
.d.ts 作る?
Pros/Cons
• Pros!
• ライブラリへの理解が深まる!
• 後の安心が手に入る!
• Cons!
• 作業前工数が膨れ上がる!
• 書き方を学習するのが大変
みんなはどう思うかな?
Pros/Cons
• Pros!
• ライブラリへの理解が深まる!
• 後の安心が手に入る!
• Cons!
• 作業前工数が膨れ上がる!
• 書き方を学習するのが大変
作業工数?
弊社 No.2 TypeScripter
Grapswizさんの感想
作業工数?
• ぶっちゃけ趣味プログラミング中では
マジであります。!
• 仕事の場合は最低限使える範囲を

パパっとやって、終わりっ!!
• 型定義貯金!
• キッチリやると後々デバッグ時間の

削減という形で還元されてくる
書き方の学習
• 基本はTypeScriptを踏襲!
• トップレベルには declare をつける!
• 実装を書けないことに留意!
• モジュールの書き方!
• 内部モジュール!
• 外部モジュール
TypeScript
難易度の頂
.d.ts 作る!!
How to write .d.ts?
• 普通にライブラリ使う時と変わらない!
• APIリファレンスを読む!
• 実装を読む!
• 実行してみて確かめる
時間余ったら実演します
やってはいけない!
• 無駄に凝る
てきとーにやろ
結論
• コンパイルが通ればいいんだよ!
ただし—noImplicitAny
非対応はギルティ
向き・不向き
• TypeScriptに不向きなライブラリもある!
• 独自のOOPの仕組みを持つもの!
• データ入れるとクラスが返るやつ!
• 主にDBのORマッパが多い!
• Sequelizeの例
⃝⃝言語にある☓☓があれば解決するのに…
という悩み、結構ある
避けないほうがいい知識
• 内部・外部モジュール!
• TypeScriptリファレンス参照!
• teppeisさんのBlog参照!
• www.typescriptlang.org/Handbook!
• 誰か許可とって翻訳してください><!
• Class Decomposition が特に重要
anyを使う
• とりあえずコンパイル通る!!
• A. まずany、後から詳細化していく!
作れる = 正義!
anyを使う
• とりあえずコンパイル通る!!
• A. まずany、後から詳細化していく!
• B. 利用側コードに必要なとこ作る
PRはBの方が送りやすい
declare var $: any; ←流石にコレは困る
new operator
• new 演算子を使う対象!
• class!
• interface (class decomposition)!
• 具体例!
• goo.gl/qD60Vi
interfaceが主流?
new operator
• 何故クラスを分解するのか?!
• interfaceは後付で拡張できる!
• だいたいJavaScriptのせい!
• Aライブラリを勝手に拡張する

Bライブラリ!
• ↑interfaceじゃないと対応できない
new operator
• interfaceの利点!
• 別ライブラリの拡張に耐える!!
• 具体例 goo.gl/nHMTqu!
• interfaceの欠点!
• 継承できない!!
• 具体例 goo.gl/QOO8yl
用途を考え
classの利用を検討
命名規則
• JSの流儀に従う!
• クラス名は先頭大文字 Sample!
• モジュール名もかな…!
• 変数、メソッド キャメルケース fooBar!
• インタフェースは先頭I付き ISample!
• ↑賛否両論 ちょとおすすめ ぐらい
C#erはメソッド先頭大文字多いですね
それはどうかと思うけど…
オブジェクト型リテラル
• キッチリ理解すると柔軟な表現が可能!
• これだけで1時間話せるレベル!
• TSチートシート goo.gl/QiXe8t!
• TSリファレンス goo.gl/G9gzeu
非インスタンス化モジュール
• 型定義を作る時の便利なテクニック!!
• 具体例 goo.gl/xVNmYD!
• わかめの後悔!
• non instantiated module!
• 非インスタンス化モジュールと訳した!
• 幽霊モジュール goo.gl/vlQGUF!
• ↑わかりやすい… DTコミッタ
@basarat 命名
関数とモジュールの定義統合
• 具体例 goo.gl/F7tvg6!
• なんでこんなことできるの?!
• JavaScriptでできるから(たぶん
オーバーロード
• any, Function, …args: any[] からの脱皮!
• より優れたコンパイル時エラー検出!
• 様々な引数に対応する!
• 文字列リテラルによる特殊化!
• 引数によって異なる型を返す
pull requestを送ろう!
作ったものは共有しよう
• 他の人が楽できるぞ!!
• 自分が楽できるのも誰かのおかげ!!
• 誰かが完成させてくれるかも?!
• 誰かがバグ直してくれるかも?
主に下2つが重要
pull request?
• GitHubにはpull requestがある!
• PRと略されることも!
• fork→commit→push→PR!!
• GitHub実践入門が良書らしい
PR童貞が許されるのは高校生までだよね∼w
具体的に
• Qiitaに解説記事書いた!
• DefinitelyTyped公式解説もある!
• コミッタに日本人がいる→!
• ↑当然日本語が喋れる!
• ちなみに英語は不自由
ん?
• もし、あなたがPR未経験なら…!
• DefinitelyTypedにPRを出そう!!
• たくさんの型定義の集合!
• 全体を把握しなくても追加できる!!
• 1文字だけの修正のPRも大歓迎!
Live Writing
自分用メモ
antigen theme imajes
⌘ Shift +
⌘ Shift 0
• 適当なライブラリを調べて書く!
• Bacon.js 良さそう!
• その場で選んでもらう?
どっちにしよ?
3分で決めよう!
かもん!しつもん!
だいたい全部書いてある
1時間で喋りきれない事
多すぎんよ∼ww
Amazon(紙, Kindle)
達人出版会(PDF)

More Related Content

What's hot (19)

PDF
TypeScript超入門
Narami Kiyokura
 
PPTX
TypeScriptはいいぞ
Jun Suzuki
 
PPTX
Typescriptの中のこと(浅め)
Kazuhide Maruyama
 
PDF
Visual Studioで始めるTypeScript開発入門
Narami Kiyokura
 
PPTX
TypeScript 1.0 Released!
Horuchi Hiroki
 
PPTX
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
Shumpei Shiraishi
 
PDF
IDEALIZE YOU
佑介 九岡
 
PDF
WebStormでできること
kamiyam .
 
PDF
LT駆動開発04 5分では分からないTypeScriptのなんとか
Kazuya Matsubara
 
PDF
むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8
civic Sasaki
 
PDF
continuatioN Linking
Kouji Matsui
 
PDF
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
Yoshitaka Kawashima
 
PDF
JavaScript 研修
Yuki Ishikawa
 
PDF
Nespのコード生成
Kouji Matsui
 
PDF
Type scriptのいいところ
Kazuhide Maruyama
 
PPTX
2014 08-30 life with roslyn
shibuki
 
PDF
JavaScript MVC入門
大樹 小倉
 
PDF
TypeScript vs flow
takuronishida1
 
PDF
Win32 APIをてなずけよう
Kouji Matsui
 
TypeScript超入門
Narami Kiyokura
 
TypeScriptはいいぞ
Jun Suzuki
 
Typescriptの中のこと(浅め)
Kazuhide Maruyama
 
Visual Studioで始めるTypeScript開発入門
Narami Kiyokura
 
TypeScript 1.0 Released!
Horuchi Hiroki
 
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
Shumpei Shiraishi
 
IDEALIZE YOU
佑介 九岡
 
WebStormでできること
kamiyam .
 
LT駆動開発04 5分では分からないTypeScriptのなんとか
Kazuya Matsubara
 
むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8
civic Sasaki
 
continuatioN Linking
Kouji Matsui
 
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
Yoshitaka Kawashima
 
JavaScript 研修
Yuki Ishikawa
 
Nespのコード生成
Kouji Matsui
 
Type scriptのいいところ
Kazuhide Maruyama
 
2014 08-30 life with roslyn
shibuki
 
JavaScript MVC入門
大樹 小倉
 
TypeScript vs flow
takuronishida1
 
Win32 APIをてなずけよう
Kouji Matsui
 

Viewers also liked (13)

PDF
TypeScript And ALM
Kazushi Kamegawa
 
PDF
TypeScript 1.0 オーバービュー
Akira Inoue
 
PDF
15分でわかった気になるdart
Satoshi KOBAYASHI
 
PDF
TypeScript による今風の web アプリ開発
靖 陣内
 
PDF
Firefox OS勉強会 2nd TypeScript+AngularJS
Masahiro Wakame
 
PDF
TypeScript 勉強会
Masahiro Wakame
 
PDF
Google Glass XE17版
Masahiro Wakame
 
PDF
20ヶ月を取り戻す Dart flight school
Masahiro Wakame
 
PDF
コンパイラ指向ReVIEW
Masahiro Wakame
 
PDF
ng-japan 2015 TypeScript+AngularJS 1.3
Masahiro Wakame
 
PDF
GoCon2016 spring 自作Webフレームワーク uconを作った話
Masahiro Wakame
 
PDF
About dart
Naoto Higuchi
 
PPTX
TypeScriptについて
echigoya-jp
 
TypeScript And ALM
Kazushi Kamegawa
 
TypeScript 1.0 オーバービュー
Akira Inoue
 
15分でわかった気になるdart
Satoshi KOBAYASHI
 
TypeScript による今風の web アプリ開発
靖 陣内
 
Firefox OS勉強会 2nd TypeScript+AngularJS
Masahiro Wakame
 
TypeScript 勉強会
Masahiro Wakame
 
Google Glass XE17版
Masahiro Wakame
 
20ヶ月を取り戻す Dart flight school
Masahiro Wakame
 
コンパイラ指向ReVIEW
Masahiro Wakame
 
ng-japan 2015 TypeScript+AngularJS 1.3
Masahiro Wakame
 
GoCon2016 spring 自作Webフレームワーク uconを作った話
Masahiro Wakame
 
About dart
Naoto Higuchi
 
TypeScriptについて
echigoya-jp
 
Ad

Similar to TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部 (20)

PPTX
JavaScriptを使った開発を始めるなら!TypeScriptをはじめよう ~ ステップアップ
慎一 古賀
 
PDF
議論を描く技術「ファシリテーショングラフィック」
nishikawa_makoto7
 
PDF
TypeScript で型を上手く使う試み.pdf
Ryo Higashigawa
 
PPTX
メンテナブルなJsってなんだろう
Daiki Matsumoto
 
PDF
趣味プログラマの先輩からのアドバイス
Hiroaki Murayama
 
PDF
PFPファシグラ(2009/07/03)
nishikawa_makoto7
 
PPTX
TypeScriptで作る型安全FirefoxOSアプリ
progre
 
PDF
プログラミング同好会とすごい合同勉強会
nemumu
 
PDF
バイラルメディアを作ったら3万いいね集まった!
Kato Tomo
 
PDF
バイラルメディアを作ったら3万いいね集まった!
Kato Tomo
 
ODP
HTML5 アプリ開発
tomo_masakura
 
PPTX
VPSやめてHerokuに移行したお話
Hiroyuki Hayashi
 
PDF
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
nishio
 
PDF
プレゼンテーション 7
Kato Tomo
 
KEY
SnapDishの事例
Fumikazu Kiyota
 
PPT
バイラルメディアを作ったら3万いいね集まった!
Kato Tomo
 
PDF
⑮jQueryをおぼえよう!その1
Nishida Kansuke
 
PDF
a-blogcsm な寺子屋 2 in Okazaki
Etsushi Ishii
 
PDF
サーバサイドエンジニアが 1年間まじめにSPAやってみた
Itaru Kitagawa
 
PPTX
プログラマが欲しい仕様書とは
Katsutoshi Makino
 
JavaScriptを使った開発を始めるなら!TypeScriptをはじめよう ~ ステップアップ
慎一 古賀
 
議論を描く技術「ファシリテーショングラフィック」
nishikawa_makoto7
 
TypeScript で型を上手く使う試み.pdf
Ryo Higashigawa
 
メンテナブルなJsってなんだろう
Daiki Matsumoto
 
趣味プログラマの先輩からのアドバイス
Hiroaki Murayama
 
PFPファシグラ(2009/07/03)
nishikawa_makoto7
 
TypeScriptで作る型安全FirefoxOSアプリ
progre
 
プログラミング同好会とすごい合同勉強会
nemumu
 
バイラルメディアを作ったら3万いいね集まった!
Kato Tomo
 
バイラルメディアを作ったら3万いいね集まった!
Kato Tomo
 
HTML5 アプリ開発
tomo_masakura
 
VPSやめてHerokuに移行したお話
Hiroyuki Hayashi
 
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
nishio
 
プレゼンテーション 7
Kato Tomo
 
SnapDishの事例
Fumikazu Kiyota
 
バイラルメディアを作ったら3万いいね集まった!
Kato Tomo
 
⑮jQueryをおぼえよう!その1
Nishida Kansuke
 
a-blogcsm な寺子屋 2 in Okazaki
Etsushi Ishii
 
サーバサイドエンジニアが 1年間まじめにSPAやってみた
Itaru Kitagawa
 
プログラマが欲しい仕様書とは
Katsutoshi Makino
 
Ad

More from Masahiro Wakame (20)

PDF
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
Masahiro Wakame
 
PDF
Google Glassでできること XE11版 最新開発情報 Mirror API & GDK
Masahiro Wakame
 
PDF
CEATEC Glassware(Google Glassアプリ)開発の指南と開発事例
Masahiro Wakame
 
PDF
ReVIEW & CI - ChefでCI環境構築
Masahiro Wakame
 
PDF
AngularJS+TypeScript - AngularJS 1周年記念勉強会
Masahiro Wakame
 
PDF
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Masahiro Wakame
 
PDF
俺とお前とGoogleware
Masahiro Wakame
 
PDF
Datastoreへのアクセスを楽してMemcacheアクセスに置き換えるライブラリ作った
Masahiro Wakame
 
PDF
TypeScript Hands-on
Masahiro Wakame
 
PDF
わかめモナ化LT
Masahiro Wakame
 
PDF
NFC app launcher
Masahiro Wakame
 
PDF
函館IKA Eclipse活用術
Masahiro Wakame
 
PDF
函館IKA ICS開発情報
Masahiro Wakame
 
PDF
JavaScript 再入門2
Masahiro Wakame
 
PDF
JavaScript再入門
Masahiro Wakame
 
PDF
デバッグ戦略
Masahiro Wakame
 
PDF
Eclipse活用術
Masahiro Wakame
 
PDF
Android操作大全
Masahiro Wakame
 
PDF
僕の考えるAPT開発の常識 ぐだ生 2011/04/09版
Masahiro Wakame
 
PDF
僕の考えるAPT開発の常識
Masahiro Wakame
 
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
Masahiro Wakame
 
Google Glassでできること XE11版 最新開発情報 Mirror API & GDK
Masahiro Wakame
 
CEATEC Glassware(Google Glassアプリ)開発の指南と開発事例
Masahiro Wakame
 
ReVIEW & CI - ChefでCI環境構築
Masahiro Wakame
 
AngularJS+TypeScript - AngularJS 1周年記念勉強会
Masahiro Wakame
 
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Masahiro Wakame
 
俺とお前とGoogleware
Masahiro Wakame
 
Datastoreへのアクセスを楽してMemcacheアクセスに置き換えるライブラリ作った
Masahiro Wakame
 
TypeScript Hands-on
Masahiro Wakame
 
わかめモナ化LT
Masahiro Wakame
 
NFC app launcher
Masahiro Wakame
 
函館IKA Eclipse活用術
Masahiro Wakame
 
函館IKA ICS開発情報
Masahiro Wakame
 
JavaScript 再入門2
Masahiro Wakame
 
JavaScript再入門
Masahiro Wakame
 
デバッグ戦略
Masahiro Wakame
 
Eclipse活用術
Masahiro Wakame
 
Android操作大全
Masahiro Wakame
 
僕の考えるAPT開発の常識 ぐだ生 2011/04/09版
Masahiro Wakame
 
僕の考えるAPT開発の常識
Masahiro Wakame
 

Recently uploaded (9)

PPTX
色について.pptx .
iPride Co., Ltd.
 
PPTX
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
iPride Co., Ltd.
 
PDF
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
 
PDF
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
 
PDF
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
 
PDF
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
 
PDF
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
 
PDF
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
 
PPTX
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
iPride Co., Ltd.
 
色について.pptx .
iPride Co., Ltd.
 
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
iPride Co., Ltd.
 
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
 
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
 
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
 
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
 
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
 
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
 
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
iPride Co., Ltd.
 

TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部