質問編集履歴
3
コードの訂正・エラーの行数を記載
test
CHANGED
File without changes
|
test
CHANGED
@@ -23,6 +23,7 @@
|
|
23
23
|
}
|
24
24
|
```
|
25
25
|
エラーメッセージ
|
26
|
+
3行目: `parser: ((str: string) => T) = ((str: string) => +str)`の部分
|
26
27
|
`'T' could be instantiated with an arbitrary type which could be unrelated to 'number'`
|
27
28
|
|
28
29
|
つきつめると、ジェネリクス関数で以下のようにデフォルト引数を指定した時にエラーとなることが分かりました。
|
@@ -32,6 +33,7 @@
|
|
32
33
|
}
|
33
34
|
```
|
34
35
|
エラーメッセージ
|
36
|
+
1行目 `x: T = "default"` の部分
|
35
37
|
`'T' could be instantiated with an arbitrary type which could be unrelated to 'string'.`
|
36
38
|
|
37
39
|
|
@@ -44,6 +46,7 @@
|
|
44
46
|
### 発生している問題・エラーメッセージ
|
45
47
|
|
46
48
|
ジェネリクス関数で型引数を用いたデフォルト引数を指定した時に、型引数`T`がデフォルト引数の型`string`になることなく以下のエラーとなる
|
49
|
+
1行目 `x: T = "default"`の部分
|
47
50
|
`'T' could be instantiated with an arbitrary type which could be unrelated to 'string'.`
|
48
51
|
|
49
52
|
### 該当のソースコード
|
@@ -58,7 +61,7 @@
|
|
58
61
|
|
59
62
|
- 以下のようにデフォルト引数と同じ型`string`を型引数`T`のデフォルト引数とするなどしたがうまく行かなかった
|
60
63
|
```ts
|
61
|
-
function f<T = n
|
64
|
+
function f<T = string>(x: T = "default"): T {
|
62
65
|
return x;
|
63
66
|
}
|
64
67
|
```
|
2
コードの訂正(デフォルト引数 2度目)
test
CHANGED
File without changes
|
test
CHANGED
@@ -37,28 +37,28 @@
|
|
37
37
|
|
38
38
|
### 実現したいこと
|
39
39
|
|
40
|
-
- 「#該当のソースコード」で、デフォルト引数`
|
40
|
+
- 「#該当のソースコード」で、デフォルト引数`"default"`より、デフォルトでは`T`を`string`とするデフォルト引数を指定したジェネリクス関数を作成したい
|
41
41
|
|
42
42
|
自分のジェネリクスへの理解不足による問題だと思いますが、こういうことは不可能(デフォルト引数に指定した型は型引数のデフォルトと互換性がなく型引数のデフォルトにならない)なら教えていただけると幸いです。よろしくお願いします。
|
43
43
|
|
44
44
|
### 発生している問題・エラーメッセージ
|
45
45
|
|
46
|
-
ジェネリクス関数で型引数を用いたデフォルト引数を指定した時に、型引数`T`がデフォルト引数の型`n
|
46
|
+
ジェネリクス関数で型引数を用いたデフォルト引数を指定した時に、型引数`T`がデフォルト引数の型`string`になることなく以下のエラーとなる
|
47
47
|
`'T' could be instantiated with an arbitrary type which could be unrelated to 'string'.`
|
48
48
|
|
49
49
|
### 該当のソースコード
|
50
50
|
|
51
51
|
```ts
|
52
|
-
function f<T>(x: T =
|
52
|
+
function f<T>(x: T = "default"): T {
|
53
53
|
return x;
|
54
54
|
}
|
55
55
|
```
|
56
56
|
|
57
57
|
### 試したこと
|
58
58
|
|
59
|
-
- 以下のようにデフォルト引数と同じ型`n
|
59
|
+
- 以下のようにデフォルト引数と同じ型`string`を型引数`T`のデフォルト引数とするなどしたがうまく行かなかった
|
60
60
|
```ts
|
61
|
-
function f<T = number>(x: T =
|
61
|
+
function f<T = number>(x: T = "default"): T {
|
62
62
|
return x;
|
63
63
|
}
|
64
64
|
```
|
@@ -68,10 +68,10 @@
|
|
68
68
|
return x;
|
69
69
|
}
|
70
70
|
|
71
|
-
f(
|
71
|
+
f("default");
|
72
72
|
```
|
73
73
|
|
74
|
-
- Denoの問題かと[TS Playgroundで試した](https://www.typescriptlang.org/play?#code/GYVwdgxgLglg9mABMAPAFQHwAoAeAuRNRAXkQE
|
74
|
+
- Denoの問題かと[TS Playgroundで試した](https://www.typescriptlang.org/play?#code/GYVwdgxgLglg9mABMAPAFQHwAoAeAuRNRAXkQCIATAU2AEMQAbKMgSgKIG8BYAKAEgATlSggBSHAG5eAXyA)が同様のエラーが出た
|
75
75
|
|
76
76
|
### 補足情報(FW/ツールのバージョンなど)
|
77
77
|
|
1
コードの訂正(デフォルト引数)
test
CHANGED
File without changes
|
test
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
`{ year: +yyyy, month: +mm, day: +dd }`
|
8
8
|
のようなものをデフォルトで返す関数を作成しております。
|
9
9
|
|
10
|
-
この関数は、状況に応じて例えば`m
|
10
|
+
この関数は、状況に応じて例えば`mm`を
|
11
11
|
`month: { value: number; isLeap: boolean; }`
|
12
12
|
の形式にパースする関数
|
13
13
|
`(str: string) => { value: number; isLeap: boolean; }`
|
@@ -27,7 +27,7 @@
|
|
27
27
|
|
28
28
|
つきつめると、ジェネリクス関数で以下のようにデフォルト引数を指定した時にエラーとなることが分かりました。
|
29
29
|
```ts
|
30
|
-
function f<T>(x: T =
|
30
|
+
function f<T>(x: T = "default"): T {
|
31
31
|
return x;
|
32
32
|
}
|
33
33
|
```
|