Skip to content

Commit 7cfa658

Browse files
author
Orta
authored
Merge pull request #286 from Quramy/i18n-jp-tsconfig-strict-options
Translate some options in strict mode family into ja
2 parents 9db751b + 2bf0f5e commit 7cfa658

File tree

5 files changed

+166
-0
lines changed

5 files changed

+166
-0
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
---
2+
display: "厳密なチェック"
3+
---
4+
5+
ビルド時に利用可能なすべての改善を有効化するため、[`strict`](#strict)オプションの利用を推奨します。
6+
7+
TypeScriptは幅広いJavaScriptパターンと、デフォルトで様々なスタイルの柔軟性を許容しています。
8+
コードベースの安全性と潜在的なスケーラビリティは、これらのテクニックとしばしば相反します。
9+
10+
サポートされるJavaScriptの多様さにより、TypeScriptを新しいバージョンへアップグレードすると2種類のエラーが明らかになるでしょう:
11+
12+
- すでにコードベースに存在していたエラー。TypeScriptのJavaScriptに対する理解が洗練されて発見されます。
13+
- 新しい問題領域に取り組む一連の新しいエラー。
14+
15+
通常、TypeScriptは後者のエラーに対するコンパイラフラグを追加しますが、デフォルトでは有効化しません。
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
---
2+
display: "No Implicit Any"
3+
oneline: "Avoid introducing anys inside your codebase when a type could be specified"
4+
---
5+
6+
いくつかの型アノテーションが存在しないケースにおいて、TypeScriptは変数の型が推論できないときに、`any`型へフォールバックします。
7+
8+
このため、エラーを見逃す可能性があります。例えば:
9+
10+
```ts twoslash
11+
// @noImplicitAny: false
12+
function fn(s) {
13+
// エラーにならない?
14+
console.log(s.subtr(3));
15+
}
16+
fn(42);
17+
```
18+
19+
ただし、`noImplicitAny`を有効化すると、TypeScriptは型が`any`に推論されるときは常にエラーを発生させます:
20+
21+
```ts twoslash
22+
// @errors: 7006
23+
function fn(s) {
24+
console.log(s.subtr(3));
25+
}
26+
```
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
display: "Strict"
3+
oneline: "Enable TypeScript's most in-depth type checking rules"
4+
---
5+
6+
`strict`フラグは、プログラムの正しさを強く保証するための幅広い型チェックの挙動を有効化します。
7+
このオプションの有効化は、以降で述べるすべての_strictモードファミリー_オプションの有効化と等価です。
8+
必要に応じて、個別のstrictモードファミリーを無効化できます。
9+
10+
今後のTypeScriptのバージョンがこのフラグの配下により厳密なチェックを導入するかもしれません。この場合、TypeScriptのアップグレードにより、プログラムに新しい種類のエラーが発見されることもあるでしょう。
11+
適切かつ可能な場合、この挙動を無効化するための対応するフラグも追加されます。
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
---
2+
display: "Strict Function Types"
3+
oneline: "Ensure that function parameters are consistent"
4+
---
5+
6+
有効化すると、このフラグは関数のパラメータをより正しくチェックするようになります。
7+
8+
次は`strictFunctionTypes`が無効な場合の基本的な例です:
9+
10+
```ts twoslash
11+
// @strictFunctionTypes: false
12+
function fn(x: string) {
13+
console.log("Hello, " + x.toLowerCase());
14+
}
15+
16+
type StringOrNumberFunc = (ns: string | number) => void;
17+
18+
// 安全でない代入
19+
let func: StringOrNumberFunc = fn;
20+
// 安全でない呼び出し - エラーとなります
21+
func(10);
22+
```
23+
24+
`strictFunctionTypes`を_有効化_すると、エラーが正しく検知されます:
25+
26+
```ts twoslash
27+
// @errors: 2322
28+
function fn(x: string) {
29+
console.log("Hello, " + x.toLowerCase());
30+
}
31+
32+
type StringOrNumberFunc = (ns: string | number) => void;
33+
34+
// 安全でない代入は抑止されます
35+
let func: StringOrNumberFunc = fn;
36+
```
37+
38+
私達はこの機能を開発する際、本質的に安全でないClass階層を数多く見つけました。中にはDOMのものも含まれていました。
39+
このため、この設定は_function_構文で記述された関数にのみ適用され、_メソッド_として記述された関数には適用されません:
40+
41+
```ts twoslash
42+
type Methodish = {
43+
func(x: string | number): void;
44+
};
45+
46+
function fn(x: string) {
47+
console.log("Hello, " + x.toLowerCase());
48+
}
49+
50+
// 最終的に安全でない代入となりますが、エラー検知はされません
51+
const m: Methodish = {
52+
func: fn
53+
};
54+
m.func(10);
55+
```
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
---
2+
display: "Strict Null Checks"
3+
oneline: "Ensure that nullability is respected in the type checker"
4+
---
5+
6+
`strictNullChecks``false`のとき、`null``undefined`は言語により事実上無視されます。
7+
これは実行時の予期しないエラーの原因となります。
8+
9+
`strictNullChecks``true`のとき、`null``undefined`はそれ自身に明示的な型が与えられ、具体的な値を期待して利用しようとした場合にエラーとなります。
10+
11+
例えば、次のTypeScriptコードの`users.find`は実際にユーザーを見つけられる保証がありません。
12+
しかし、ユーザーを見つけられたかのようにコードを書くことができます:
13+
14+
```ts twoslash
15+
// @strictNullChecks: false
16+
// @target: ES2015
17+
declare const loggedInUsername: string;
18+
19+
const users = [
20+
{ name: "Oby", age: 12 },
21+
{ name: "Heera", age: 32 }
22+
];
23+
24+
const loggedInUser = users.find(u => u.name === loggedInUsername);
25+
console.log(loggedInUser.age);
26+
```
27+
28+
`strictNullChecks``true`にすると、`loggedInUser`を利用する前に存在を確認していないことを示すエラーが発生します。
29+
30+
```ts twoslash
31+
// @errors: 2339 2532
32+
// @target: ES2020
33+
// @strictNullChecks
34+
declare const loggedInUsername: string;
35+
36+
const users = [
37+
{ name: "Oby", age: 12 },
38+
{ name: "Heera", age: 32 }
39+
];
40+
41+
const loggedInUser = users.find(u => u.name === loggedInUsername);
42+
console.log(loggedInUser.age);
43+
```
44+
45+
単純化してみると配列の`find`関数が次のようになっていることから、2つ目の例はエラーとなったのです:
46+
47+
48+
```ts
49+
// strictNullChecks: trueのとき
50+
type Array = {
51+
find(predicate: (value: any, index: number) => boolean): S | undefined;
52+
};
53+
54+
// strictNullChecks: falseのとき、undefinedは型システムから取り除かれ、
55+
// 常に結果が見つかるかのようにコードを書けるようになります
56+
type Array = {
57+
find(predicate: (value: any, index: number) => boolean): S;
58+
};
59+
```

0 commit comments

Comments
 (0)