TypeScriptの環境作成メモ
TypeScriptの環境作成メモ
Typescript用の環境を作っていくメモ. エディタは,IDE代わりにもなるVSCodeを使っていく.
環境
- Windows10
- VSCode 1.32.3
TypeScript初心者向け資料
- TypeScript in 5 minutes:TypeScript公式のチュートリアルの中にある TypeScript in 5 minutes · TypeScript
- TypeScript tutorial in Visual Studio Code: Visual Studio Code公式にあるチュートリアル TypeScript tutorial with Visual Studio Code
- Handbook:基本構文はここにある. Basic Types · TypeScript
- Handbook(日本語訳非公式): TypeScript 日本語ハンドブック | js STUDIO
インストール
2019年3月時点での最新版はv3.3.4になる.
-
グローバルにインストールする場合:
npm install -g typescript
-
ローカルにインストールする場合:
cd <projectDir> npm install --save-dev typescript
バージョンの確認
インストールができるとtsc
コマンドが利用できる.
-v
オプションでバージョンを確認できる.
tsc -v > Version 3.3.4000
ローカルの場合:
npx tsc -v
設定ファイルtsconfig.json
の作成
ビルドするときの設定ファイルtsconfig.json
をつくる.
tsc --init > message TS6071: Successfully created a tsconfig.json file.
tsconfig.json
ファイルの中身:
{ "compilerOptions": { /* Basic Options */ "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */ "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ // "lib": [], /* Specify library files to be included in the compilation. */ // "allowJs": true, /* Allow javascript files to be compiled. */ // "checkJs": true, /* Report errors in .js files. */ // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ // "declaration": true, /* Generates corresponding '.d.ts' file. */ // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ // "sourceMap": true, /* Generates corresponding '.map' file. */ // "outFile": "./", /* Concatenate and emit output to single file. */ // "outDir": "./", /* Redirect output structure to the directory. */ // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ // "composite": true, /* Enable project compilation */ // "removeComments": true, /* Do not emit comments to output. */ // "noEmit": true, /* Do not emit outputs. */ // "importHelpers": true, /* Import emit helpers from 'tslib'. */ // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ /* Strict Type-Checking Options */ "strict": true, /* Enable all strict type-checking options. */ // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ // "strictNullChecks": true, /* Enable strict null checks. */ // "strictFunctionTypes": true, /* Enable strict checking of function types. */ // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ /* Additional Checks */ // "noUnusedLocals": true, /* Report errors on unused locals. */ // "noUnusedParameters": true, /* Report errors on unused parameters. */ // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ /* Module Resolution Options */ // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ // "typeRoots": [], /* List of folders to include type definitions from. */ // "types": [], /* Type declaration files to be included in compilation. */ // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ /* Source Map Options */ // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ /* Experimental Options */ // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ } }
IDEによって(特にVSCode)はtsconfig.json
がないと,Lintのエラーが出る場合がある.
tsconfig.json
のオプション
よく使うであろうオプションのメモ.
- `"target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */` トランスパイル後のESのバージョンを指定する.ES5以下にしておけばIEでも動作できる.
- `"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */` Node.jsを使ってトランスパイルする場合,`commonjs`のままで問題ない.
- ` "sourceMap": true, /* Generates corresponding '.map' file. */` `js.map`ファイルの作成.
- ` "declaration": true, /* Generates corresponding '.d.ts' file. */` 型定義ファイル`.d.ts`の作成.
トランスパイル・ビルド
トランスパイル:
オプションなしファイル名指定のトランスパイルの場合,
tsconfig.json
は使われない.
tsc file.ts
ビルド:tsconfig.json
を使ってトランスパイル.
tsc --buld # or tsc
プロジェクトフォルダを直接指定してビルドすることもできる.
この場合,中にあるtsconfig.json
が使われる.
tsc -p <projectDir>
型定義ファイルの作成
トランスパイル+型定義ファイルの作成:
tsc -d
型定義ファイルのみの作成:
tsc -d --emitDeclarationOnly
TSLintを使う
https://palantir.github.io/tslint/
global:
npm install -g tslint
local:
cd <projectDir> npm install --save-dev tslint
talint
コマンドが使えるようになる.
設定ファイル(tslint.json
)の作成
Lintの共通設定は,設定ファイル(tslint.json
)を作成してここに書く.
tslint --init
デフォで作成されるtslint.json
は下になる,
{ "defaultSeverity": "error", "extends": ["tslint:recommended"], "jsRules": {}, "rules": {}, "rulesDirectory": [] }
ルール(rules)の変更
ルール一覧は以下にある.
https://palantir.github.io/tslint/rules/
"extends": ["tslint:recommended"]
のままだと使いにくいルールもある.
例えば,
- Interface名の最初に
I
をつけなければならない.:"interface-name"
- オブジェクトの最後のプロパティにもカンマをつけなければならない.:
"trailing-comma"
これらのルールを無効(false
)にすると以下になる.
{ "defaultSeverity": "error", "extends": ["tslint:recommended"], "jsRules": {}, "rules": { "interface-name": [false], "trailing-comma": [false] }, "rulesDirectory": [] }
Lintにかける
# Lint TypeScript source globs tslint -c tslint.json '*.ts'
Exit Codes:
- 0: Linting succeeded without errors (warnings may have occurred)
- 1: An invalid command line argument or combination thereof was used
- 2: Linting failed with one or more rule violations with severity error
VSCode上でTSLintを使う
tslint.json
ファイルがあればtslint
コマンドを使わなくても,ルール違反を[Problems]欄に表示してくれる.