質問編集履歴

7

コメントを元にして考えて試したソースコードを追加

2020/06/16 10:39

投稿

kuro3
kuro3

スコア27

test CHANGED
File without changes
test CHANGED
@@ -168,6 +168,52 @@
168
168
 
169
169
 
170
170
 
171
+ [コメントの指摘を元に考えたソースコード](https://www.typescriptlang.org/play/?ssl=13&ssc=12&pln=13&pc=17#code/C4TwDgpgBAKg7gSwMYQIYCMA20C8UB2ArgLboQBOUAPlAM7DkL4DmA3AFDsBmh+SwCAPb4owRCgA8MAHwAKAB4AuWAEplMKAG92UXXUTAkACyizQkQVyjyVWnXodJUtaAHIipCq8X2HfqOQQwITkIvJQAFRQAEysUAD08XRGgoSYACYEgsBQZKLg0BTkguS+-nqJAUEhIq5GEJiYgq5QANRQdQ1NrnGVtClpmXnmheTFpeVQTi4d9Iws3mWTgcGh1m3WvUn9qRlZOcMFUEUlS+WVKzUxkTFbybtD0CPHY6dlAL5ll2v4EABuFA4n3YSGEtEE2AAdE1mGZxBAJB4yOQ5NEVCoOKD8OCoTC4cgEXMmMw5J1Gs10ZiwRCINDBLCxASzORCBBKQltgM9odIC9xuwgA)
172
+
173
+
174
+
175
+ ```typescript
176
+
177
+ type Twiceable = number | string;
178
+
179
+
180
+
181
+ function twice<T>(x: T): T {
182
+
183
+ switch (typeof x) {
184
+
185
+ case 'number':
186
+
187
+ return x * 2; // should not be type error
188
+
189
+ // return 'hello' + 'hello'; // should be type error
190
+
191
+ case 'string':
192
+
193
+ return x + x; // should not be type error
194
+
195
+ // return 2 * 2; // should be type error
196
+
197
+
198
+
199
+ }
200
+
201
+ return never;
202
+
203
+ }
204
+
205
+
206
+
207
+ console.log(twice<number>(2));
208
+
209
+ console.log(twice<string>('hello'));
210
+
211
+ console.log(twice(true)); // should be type error
212
+
213
+ ```
214
+
215
+
216
+
171
217
  ### 補足情報(FW/ツールのバージョンなど)
172
218
 
173
219
 

6

実現したい内容を,作成したいやり方から具体的なソースコードに変更

2020/06/16 10:38

投稿

kuro3
kuro3

スコア27

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- TypeScript で, 以下のアルゴリズムと型制約を満たす twice 関数を作成
5
+ TypeScript で, 以下のアルゴリズムと型制約を満たす twice 関数のソースコードが欲しい
6
6
 
7
7
 
8
8
 

5

chore: 条件の言い回しを変更

2020/06/16 10:31

投稿

kuro3
kuro3

スコア27

test CHANGED
File without changes
test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  - ~~[x] 引数の型が number または string でない場合,エラーオブジェクト(実行時エラー)を返すこと(number, string 以外の型を引数で受け取らないようにするotherwiseに相当するもの)~~
14
14
 
15
- 追記(DR;TL): 今回の質問の本質は「引数の型制約と引数と返り値の一致」なので,条件から削除する. ~~元々,関数型言語のパターンマッチングのように,想定外の型の条件分岐ができないようにすること,想定した型の条件分岐を強制的に書かせることの2つを満たすやり方をTypeScript で探していた. 一番目をdefaultとErrorの返却で満たせるのでは,と考えて条件に追加していた. 2つ目は,やり方が分からないので条件から外した. ~~
15
+ 追記(DR;TL): 今回の質問の本質は「引数の型制約と引数と返り値の一致」なので,条件から削除する. ~~元々,関数型言語のパターンマッチングのように,想定外の型の条件分岐ができないようにすること,想定した型の条件分岐を強制的に書かせることの2つを満たすやり方をTypeScript で探していた. 一番目をdefaultとErrorの返却で満たせるのでは,と考えて条件に追加していた. 2つ目は,やり方が分からないので条件に入れていない ~~
16
16
 
17
17
  - [x] 数字(number)の場合は, その数字の2倍の値を返すこと
18
18
 

4

サンプルプログラムのコメントに,エラーの種類(type error)を追加

2020/06/16 10:29

投稿

kuro3
kuro3

スコア27

test CHANGED
File without changes
test CHANGED
@@ -56,7 +56,7 @@
56
56
 
57
57
 
58
58
 
59
- [twice関数 例1 | TypeSctipt Playground](https://www.typescriptlang.org/play/?ssl=5&ssc=6&pln=5&pc=15#code/GYVwdgxgLglg9mABAQwM6oKYCcoDkMBu2AFAB4BcKYAngJSViHaIDeAUIp4lABZZwB3RIyEBRLPyzEARAFVGpAA4ZoGACaI4AIwBWKqJWmIA1IlK0A3GwC+bNlGrLEAFQEwIGZFoA2GRAF5hEABbLWYAH0RUKCwYMABzKzZQSFgEbjcPAB5nRAxSKAwwNVQXTM8fDAA+MkpnehdWDi5UNygIHkRiB2U4YDNaJq5hxAg0PwByMBCwrAnyZpGRrAwoECwkUkQAKkQAJgtEAHojqJ44EG8NMDgoRDC8iTgsRaWuE8QVtY3ECZ4MbzeOATEy-f6A4GHD6oc6XDQPbCSV7DMaYX7RWIJebIt5fdabUGkKGnGEXK7CW73PyI544pYfPE-PY7fbEs5k+HUp4vN6INQYYDIS4GOnLVb4lDobB4JhScxWYa2WxsCAIVBwXwAOiB8W65WIe1olhVao1GG1cF1UH1fwBQImRqsqrA6q1Or17gw3SwIAwjuOJNh5IR3LYQA)
59
+ [twice関数 例1 | TypeSctipt Playground](https://www.typescriptlang.org/play/?ssl=14&ssc=43&pln=14&pc=47#code/GYVwdgxgLglg9mABAQwM6oKYCcoDkMBu2AFAB4BcKYAngJSViHaIDeAUIp4lABZZwB3RIyEBRLPyzEARAFVGpAA4ZoGACaI4AIwBWKqJWmIA1IlK0A3GwC+bNlGrLEAFQEwIGZFoA2GRAF5hEABbLWYAH0RUKCwYMABzKzZQSFgEbjcPAB5nRAxSKAwwNVQXTM8fDAA+MkpnehdWDi5UNygIHkRiB2U4YDNaJq5hxAg0PwByMBCwrAnyZpGRrAwoECwkUkQAKkQAJgtEAHojqJ44EG8NMDgoRDDuRz9sSUWlrhPEFbWNxAmeDDebxwCYmP4AoEgw6fVDnS4aB49Z4SOBYN7DMaYP7RWIJebo97fdabMGkaGnWEXK7CW73PxIvIotHvEafIm-PY7fbks5UhH0p6M14stQYYDIS4GAlLdlINCYHD4IhScxWYa2WxsCAIVBwXwAOmB8W65WIe1oli1Or1GENcGNUFN-0BwImFqs2rAuoNRpN7gw3SwIAw7uOFLh1MRgpeqLYQA)
60
60
 
61
61
 
62
62
 
@@ -80,15 +80,15 @@
80
80
 
81
81
  case 'number':
82
82
 
83
- return x * 2; // should not be error
83
+ return x * 2; // should not be type error
84
84
 
85
- // return 'hello' + 'hello'; // should be error
85
+ // return 'hello' + 'hello'; // should be type error
86
86
 
87
87
  case 'string':
88
88
 
89
- return x + x; // should not be error
89
+ return x + x; // should not be type error
90
90
 
91
- // return 2 * 2; // should be error
91
+ // return 2 * 2; // should be type error
92
92
 
93
93
  default:
94
94
 
@@ -104,7 +104,7 @@
104
104
 
105
105
  console.log(twice('hello'));
106
106
 
107
- console.log(twice(true)); // should be error
107
+ console.log(twice(true)); // should be type error
108
108
 
109
109
  ```
110
110
 

3

型エラーの種類(コンパイルエラー)を追加.Errorを返す条件にotherwise の場合と追記

2020/06/16 10:27

投稿

kuro3
kuro3

スコア27

test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- - ~~[x] 引数の型が number または string でない場合,エラーオブジェクト(実行時エラー)を返すこと~~
13
+ - ~~[x] 引数の型が number または string でない場合,エラーオブジェクト(実行時エラー)を返すこと(number, string 以外の型を引数で受け取らないようにするotherwiseに相当するもの)~~
14
14
 
15
15
  追記(DR;TL): 今回の質問の本質は「引数の型制約と引数と返り値の一致」なので,条件から削除する. ~~元々,関数型言語のパターンマッチングのように,想定外の型の条件分岐ができないようにすること,想定した型の条件分岐を強制的に書かせることの2つを満たすやり方をTypeScript で探していた. 一番目をdefaultとErrorの返却で満たせるのでは,と考えて条件に追加していた. 2つ目は,やり方が分からないので条件から外した. ~~
16
16
 
@@ -26,9 +26,9 @@
26
26
 
27
27
 
28
28
 
29
- - [x] 引数の型が number または string でない場合, 型エラーが発生すること
29
+ - [x] 引数の型が number または string でない場合, 型エラー(コンパイルエラー)が発生すること
30
30
 
31
- - [ ] 引数と返り値の型が一致しない場合, 型エラーが発生すること (引数が T で返り値が T 以外の場合)
31
+ - [ ] 引数と返り値の型が一致しない場合, 型エラー(コンパイルエラー)が発生すること (引数が T で返り値が T 以外の場合)
32
32
 
33
33
 
34
34
 

2

アルゴリズムの条件(Error オブジェクトの返却)を削除

2020/06/16 10:21

投稿

kuro3
kuro3

スコア27

test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,9 @@
10
10
 
11
11
 
12
12
 
13
- - [x] 引数の型が number または string でない場合,エラーオブジェクトを返すこと
13
+ - ~~[x] 引数の型が number または string でない場合,エラーオブジェクト(実行時エラー)を返すこと~~
14
+
15
+ 追記(DR;TL): 今回の質問の本質は「引数の型制約と引数と返り値の一致」なので,条件から削除する. ~~元々,関数型言語のパターンマッチングのように,想定外の型の条件分岐ができないようにすること,想定した型の条件分岐を強制的に書かせることの2つを満たすやり方をTypeScript で探していた. 一番目をdefaultとErrorの返却で満たせるのでは,と考えて条件に追加していた. 2つ目は,やり方が分からないので条件から外した. ~~
14
16
 
15
17
  - [x] 数字(number)の場合は, その数字の2倍の値を返すこと
16
18
 

1

アルゴリズムに「指定した型以外の場合,にエラーを返却する条件」を追加

2020/06/16 10:09

投稿

kuro3
kuro3

スコア27

test CHANGED
File without changes
test CHANGED
@@ -9,6 +9,8 @@
9
9
  #### アルゴリズム
10
10
 
11
11
 
12
+
13
+ - [x] 引数の型が number または string でない場合,エラーオブジェクトを返すこと
12
14
 
13
15
  - [x] 数字(number)の場合は, その数字の2倍の値を返すこと
14
16