Skip to content

Commit 6c44dce

Browse files
authored
Merge pull request #98 from shuuji3/update-ts-code
Update TypeScript and other codes and fix several docs
2 parents 883f54e + 5c01648 commit 6c44dce

24 files changed

+469
-192
lines changed

docs/enums.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,14 +104,16 @@ enum AnimalFlags {
104104
ここでは、左シフト演算子を使用して、特定のビットレベルに1を移動することにより、ビット単位の「0001」、「0010」、「0100」および「1000」になります(これらは10進数の1、2、4、8です。興味があれば)。ビット演算子`|`(or)/`&`(and)/`~`(not)は、ビットフラグを使って作業するときの友達です。
105105

106106
```ts
107-
108107
enum AnimalFlags {
109108
None = 0,
110109
HasClaws = 1 << 0,
111110
CanFly = 1 << 1,
112111
}
112+
type Animal = {
113+
flags: AnimalFlags
114+
}
113115

114-
function printAnimalAbilities(animal) {
116+
function printAnimalAbilities(animal: Animal) {
115117
var animalFlags = animal.flags;
116118
if (animalFlags & AnimalFlags.HasClaws) {
117119
console.log('animal has claws');
@@ -124,7 +126,7 @@ function printAnimalAbilities(animal) {
124126
}
125127
}
126128

127-
var animal = { flags: AnimalFlags.None };
129+
let animal: Animal = { flags: AnimalFlags.None };
128130
printAnimalAbilities(animal); // nothing
129131
animal.flags |= AnimalFlags.HasClaws;
130132
printAnimalAbilities(animal); // animal has claws
@@ -286,4 +288,4 @@ enum Color {
286288
}
287289
```
288290

289-
注意しなければならないのは、前の定義(つまり、`0``1`、...)を除外するために、列挙の最初のメンバ(ここでは`DarkRed = 3`)を再初期化しないといけないことです。それを行わない場合は、TypeScriptは警告します(エラーメッセージ:`In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element`)。
291+
注意しなければならないのは、前の定義(つまり、`0``1`、...)を除外するために、列挙の最初のメンバ(ここでは`DarkRed = 3`)を再初期化しないといけないことです。それを行わない場合は、TypeScriptは警告します(エラーメッセージ:`In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element.`)。

docs/errors/common-errors.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33

44
## TS2304
55
サンプル:
6-
> `Cannot find name ga` `Cannot find name $` `Cannot find module jquery`
6+
> `Cannot find name ga`
7+
> `Cannot find name $`
8+
> `Cannot find module jquery`
79
810
おそらく第三者のライブラリ(Googleアナリティクスなど)を使用しており、宣言していません。TypeScriptは、*スペルミス*や宣言しないで変数を使用すると、あなたを助けようとします。あなたは外部ライブラリを取り込んでいるので実行時に利用可能なものに明示する必要があります([修正方法](../types/ambient/d.ts.md))。
911

@@ -15,7 +17,7 @@
1517

1618
## TS1148
1719
サンプル:
18-
> `'Cannot compile modules unless the '--module' flag is provided`
20+
> `Cannot compile modules unless the '--module' flag is provided`
1921
2022
[モジュール](../project/modules.md)のセクションをチェックしてください。
2123

docs/jsx/react.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,22 +34,22 @@ declare module JSX {
3434
}
3535
```
3636

37-
### ステートレスな関数コンポーネント(Stateless Functional Components)
37+
### 関数コンポーネント(Functional Components)
3838

39-
あなたは単に`React.SFC`インターフェースを使ってステートレスなコンポーネントを定義することができます。
39+
あなたは単に`React.FunctionComponent`インターフェースを使ってステートレスなコンポーネントを定義することができます。
4040

4141
```ts
4242
type Props = {
4343
foo: string;
4444
}
45-
const MyComponent: React.SFC<Props> = (props) => {
45+
const MyComponent: React.FunctionComponent<Props> = (props) => {
4646
return <span>{props.foo}</span>
4747
}
4848

4949
<MyComponent foo="bar" />
5050
```
5151

52-
### ステートフルなコンポーネント(Stateful Components)
52+
### クラスコンポーネント(Class Components)
5353

5454
コンポーネントは、コンポーネントの`props`プロパティに基づいて型チェックされます。これは、JSXがどのように変換されるかによってモデル化されています。例えば属性がコンポーネントの`props`になるようにモデル化されています。
5555

@@ -181,7 +181,7 @@ class FocusingInput extends React.Component<{ value: string, onChange: (value: s
181181
<input
182182
ref={(input) => this.input = input}
183183
value={this.props.value}
184-
onChange={(e) => { this.props.onChange(this.ctrls.input.value) } }
184+
onChange={(e) => { this.props.onChange(e.target.value) } }
185185
/>
186186
);
187187
}

docs/quick/browser.md

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ cd your-project
3535
"compilerOptions": {
3636
"sourceMap": true,
3737
"module": "commonjs",
38+
"esModuleInterop": true,
39+
"resolveJsonModule": true,
40+
"experimentalDecorators": true,
3841
"target": "es5",
3942
"jsx": "react",
4043
"lib": [
@@ -65,27 +68,40 @@ cd your-project
6568
"start": "webpack-dev-server -d --content-base ./public"
6669
},
6770
"dependencies": {
68-
"@types/react": "16.4.2",
69-
"@types/react-dom": "16.0.6",
70-
"react": "16.4.1",
71-
"react-dom": "16.4.1",
72-
"ts-loader": "4.4.1",
73-
"typescript": "2.9.2",
74-
"webpack": "4.12.1",
75-
"webpack-cli": "3.0.8",
76-
"webpack-dev-server": "3.1.4"
71+
"@types/react": "16.4.10",
72+
"@types/react-dom": "16.0.7",
73+
"clean-webpack-plugin": "0.1.19",
74+
"html-webpack-plugin": "3.2.0",
75+
"react": "16.4.2",
76+
"react-dom": "16.4.2",
77+
"ts-loader": "4.4.2",
78+
"typescript": "3.0.1",
79+
"webpack": "4.16.5",
80+
"webpack-cli": "3.1.0",
81+
"webpack-dev-server": "3.1.5"
7782
}
7883
}
7984
```
8085

8186
* すべてのリソースを含む単一の`app.js`ファイルにモジュールをバンドルするための`webpack.config.js`を作成する:
8287

8388
```js
89+
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
90+
const HtmlWebpackPlugin = require('html-webpack-plugin');
91+
8492
module.exports = {
8593
entry: './src/app/app.tsx',
94+
plugins: [
95+
new CleanWebpackPlugin({
96+
cleanAfterEveryBuildPatterns: ['public/build']
97+
}),
98+
new HtmlWebpackPlugin({
99+
template: 'src/templates/index.html'
100+
}),
101+
],
86102
output: {
87103
path: __dirname + '/public',
88-
filename: 'build/app.js'
104+
filename: 'build/[name].[contenthash].js'
89105
},
90106
resolve: {
91107
extensions: ['.ts', '.tsx', '.js']
@@ -104,18 +120,18 @@ module.exports = {
104120
<html>
105121
<body>
106122
<div id="root"></div>
107-
<script src="./build/app.js"></script>
108123
</body>
109124
</html>
125+
110126
```
111127

112128
あなたのフロントエンドアプリケーションのエントリポイントである`src/app/app.tsx`
113129

114-
```js
130+
```ts
115131
import * as React from 'react';
116132
import * as ReactDOM from 'react-dom';
117133

118-
const Hello: React.SFC<{ compiler: string, framework: string }> = (props) => {
134+
const Hello: React.FunctionComponent<{ compiler: string, framework: string }> = (props) => {
119135
return (
120136
<div>
121137
<div>{props.compiler}</div>

docs/quick/library.md

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
## TypeScriptのnode moduleを作成する
2+
3+
* [Typecriptのnodemoduleの作成に関するレッスン](https://egghead.io/lessons/typescript-create-high-quality-npm-packages-using-typescript)
4+
5+
TypeScriptで書かれたモジュールを使用することは、コンパイル時の安全性とオートコンプリートが得られるので、非常に楽しいことです。
6+
7+
TypeScriptのモジュールは、Node.jsではそのまま使用でき、ブラウザでもWebpackなどを使うことで利用できるようになります。
8+
9+
高品質のTypeScriptモジュールの作成は簡単です。以下の望ましいフォルダ構造を仮定します。
10+
11+
```text
12+
package
13+
├─ package.json
14+
├─ tsconfig.json
15+
├─ src
16+
│ ├─ index.ts
17+
│ ├─ foo.ts
18+
│ └─ ...All your source files (Authored)
19+
└─ lib
20+
├─ index.d.ts.map
21+
├─ index.d.ts
22+
├─ index.js
23+
├─ foo.d.ts.map
24+
├─ foo.d.ts
25+
├─ foo.js
26+
└─ ... All your compiled files (Generated)
27+
```
28+
29+
* `src/index.ts`: ここでは、他のプロジェクトから使用できるようにしたいすべてのものをexportします。たとえば、`export { Foo } from './foo';`などを書きます。このファイルからexportしたオブジェクトは、このライブラリを使用する他の人が `import { /* Here */ } from 'example';` のように書いてimportすることができるようになります。
30+
31+
* `tsconfig.json`について
32+
* `compilerOptions``"outDir": "lib"`と、`"declaration": true``"declarationMap" : true`を設定します < これは、libフォルダに`.js` (JavaScript)と`.d.ts` (型安全性のための型宣言)と`.d.ts.map` (このファイルは、IDE上で`declaration .d.ts` => `source .ts`というナビゲーションを可能にします)が生成されます
33+
* `include: ["src"]`を設定します < これは`src`ディレクトリからのすべてのファイルを対象に含めます
34+
35+
* `package.json`について
36+
* `"main": "lib/index"` < これはNode.jsに`lib/index.js`をロードするように指示します
37+
  * `"types": "lib/index"` < これはTypeScriptに`lib/index.d.ts`をロードするように指示します
38+
39+
40+
パッケージの例:
41+
* `npm install typestyle` [for TypeStyle](https://www.npmjs.com/package/typestyle)
42+
* 使用法:`import { style } from 'typestyle';`は、完全な型安全性を提供します
43+
44+
### Dependenciesの管理
45+
46+
#### devDependencies
47+
48+
* パッケージの開発中にのみ他のパッケージに依存している場合(例: `prettier`)、依存するパッケージは`devDependency`に追加します。こうすることで、あなたのパッケージを使用するユーザーの`node_modules`には開発用の依存パッケージをインストールしないようにできます(`npm i foo`というコマンドを実行した場合には、`foo`のdevDependencies`はインストールされないためです)。
49+
*`typescript`は通常パッケージのビルド時にのみ使用されるため、`devDependency`に追加します。パッケージのユーザーはTypeScriptなしでもあなたのパッケージを利用できます。
50+
* あなたのパッケージがJavaScriptで作られた他のパッケージに依存していて、あなたのプロジェクトでは型安全性を活用したい場合には、依存しているパッケージの型パッケージ(例: `@types/foo`)を`devDependencies`に追加してください。JavaScriptの型は、メインのNPMエコシステムの*外側で*管理されています。JavaScriptエコシステムでは、セマンティックバージョニングを使用していない場合には特に、型が破壊されるのは日常茶飯事です。そのため、ユーザーが型を使用したい場合には、自分でパッケージに適したバージョンの型`@types/foo`をインストールする必要があります。型パッケージをインストールするようにユーザーに支持したい場合には、次のセクションに示すように、パッケージを`peerDependencies`に追加します。
51+
52+
#### peerDependencies
53+
54+
あなたのパッケージが依存するパッケージで、(*インストールしないと動作しない*というわけではなく)同時にインストールしたときに*よりよく動作する*というようなパッケージがある場合には、生のJSパッケージでするのと同じように、そのパッケージを`peerDependencies`に追加してください(たとえば、`react`など)。ローカルでテストする場合にも、`devDependencies`に追加する必要があります。
55+
56+
このように設定を行うことで、次のように動作するようになります。
57+
* パッケーの開発中は、`devDependencies`で指定したバージョンのパッケージがインストールされます。
58+
* 他のユーザーがあなたのパッケージをインストールした場合には、`devDependencies`で指定されたパッケージはインストール*されません*が、あなたのパッケージの`peerDependencies`に指定されているパッケージが存在しない場合には、ユーザーにそのパッケージをインストールするべきであるという警告が表示されます。
59+
60+
#### dependencies
61+
62+
あなたのパッケージが他のパッケージの*ラッパー*である場合(つまり、TypeScriptのコンパイル後にも内部で他のライブラリを使用する場合)には、そのパッケージは`dependencies`に追加しなければなりません。そうすることで、あなたのパッケージをインストールしたユーザーはあなたのパッケージに加えて、その依存パッケージを同時にインストールできるようになります。

docs/quick/nodejs.md

Lines changed: 3 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ TypeScriptは、Node.jsを公式にサポートしています。素早くNode.j
1919
```json
2020
"scripts": {
2121
"start": "npm run build:live",
22-
"build:live": "nodemon --exec ./node_modules/.bin/ts-node -- ./index.ts"
22+
"build": "tsc -p .",
23+
"build:live": "nodemon --watch 'src/**/*.ts' --exec 'ts-node' src/index.ts"
2324
},
2425
```
2526

@@ -29,50 +30,7 @@ TypeScriptは、Node.jsを公式にサポートしています。素早くNode.j
2930
* ts-nodeは自動的にtsconfig.jsonとインストールされたTypeScriptバージョンを取得し、トランスパイルを行う
3031
* ts-nodeは出力されたJavaScriptをNode.jsで実行する
3132

32-
## TypeScriptのnode moduleを作成する
33-
34-
* [Typecriptのnodemoduleの作成に関するレッスン](https://egghead.io/lessons/typescript-create-high-quality-npm-packages-using-typescript)
35-
36-
TypeScriptで書かれたモジュールを使用することは、コンパイル時の安全性とオートコンプリートが得られるので、非常に楽しいことです。
37-
38-
高品質のTypeScriptモジュールの作成は簡単です。以下の望ましいフォルダ構造を仮定します。
39-
40-
```text
41-
package
42-
├─ package.json
43-
├─ tsconfig.json
44-
├─ src
45-
│ ├─ All your source files
46-
│ ├─ index.ts
47-
│ ├─ foo.ts
48-
│ └─ ...
49-
└─ lib
50-
├─ All your compiled files
51-
├─ index.d.ts
52-
├─ index.js
53-
├─ foo.d.ts
54-
├─ foo.js
55-
└─ ...
56-
```
57-
58-
59-
* `tsconfig.json`について
60-
* `compilerOptions``"outDir": "lib"`と、`"declaration": true`を設定します < これは宣言ファイルとjsファイルをlibフォルダに生成します
61-
* `"include": ["./src / ** / *"]`を設定します < これは`src`ディレクトリからのすべてのファイルを対象に含めます
62-
63-
* `package.json`について
64-
* `"main": "lib/index"` <これはNode.jsに`lib/index.js`をロードするように指示します
65-
  * `"types": "lib/index"` <これはTypeScriptに`lib/index.d.ts`をロードするように指示します
66-
67-
68-
パッケージの例:
69-
* `npm install typestyle` [for TypeStyle](https://www.npmjs.com/package/typestyle)
70-
* 使用法:`import { style } from 'typestyle';`は、完全な型安全性を提供します
71-
72-
MORE:
73-
74-
* あなたのパッケージが他のTypeScriptで作られたパッケージに依存している場合は、そのまま生のJSパッケージと同様に`dependencies`/`devDependencies`/ `peerDependencies`に入れてください
75-
* パッケージが他のJavaScript作成パッケージに依存していて、プロジェクトで型安全性を使用する場合は、それらの型定義(`@types/foo`など)を`devDependencies`に入れます。JavaScriptの型は、主なNPMの流れの*範囲外で*管理する必要があります。JavaScriptのエコシステムでは、セマンティックなバージョン管理が行われていない場合、型をあまりにも簡単に壊すので、ユーザーが型を必要とする場合は、それらに対応する`@types/foo`のバージョンをインストールする必要があります。
33+
JavaScriptアプリケーションのデプロイの準備が完了したが、`npm run build`を実行します。
7634

7735
## ボーナスポイント
7836

0 commit comments

Comments
 (0)