回答編集履歴
5
引用が中途半端だったので
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
> せめてUser型はuserPropertysの値全てをkeyに持たないとコンパイルエラー
|
1
|
+
> せめてUser型はuserPropertysの値全てをkeyに持たないとコンパイルエラーとなるとか、userPropertysに列挙された値のみkeyに持てるとか、両者の繋がりを作ることでそういった安全性が欲しい
|
2
2
|
|
3
3
|
|
4
4
|
|
4
文章の修正
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
userPropertys を
|
5
|
+
userPropertys を User を実装したクラスのオブジェクトから生成するようにすればコンパイルエラーを起こすことはできます。
|
6
6
|
|
7
7
|
|
8
8
|
|
3
文章の修正
test
CHANGED
@@ -34,7 +34,7 @@
|
|
34
34
|
|
35
35
|
|
36
36
|
|
37
|
-
上記実装の場合は User のプロパティを消せば userPropertys.includes(value) でエラーが起き、UserStub のプロパティを消せば
|
37
|
+
上記実装の場合は User のプロパティを消せば userPropertys.includes(value) でエラーが起き、UserStub のプロパティを消せば User を満たさなくなりエラーが起きます。
|
38
38
|
|
39
39
|
|
40
40
|
|
2
コード微修正
test
CHANGED
@@ -10,11 +10,11 @@
|
|
10
10
|
|
11
11
|
type User = { id: string; name: string }
|
12
12
|
|
13
|
-
type UserKeys = Array<keyof User>;
|
14
|
-
|
15
|
-
class UserStub implements User { id = null; name = null }
|
13
|
+
class UserStub implements User { id = null; name = null; }
|
16
14
|
|
17
15
|
|
16
|
+
|
17
|
+
type UserKeys = Array<keyof User>;
|
18
18
|
|
19
19
|
const userPropertys: UserKeys = Object.keys(new UserStub()) as UserKeys;
|
20
20
|
|
1
interface いらなかった
test
CHANGED
@@ -12,9 +12,7 @@
|
|
12
12
|
|
13
13
|
type UserKeys = Array<keyof User>;
|
14
14
|
|
15
|
-
interface IUser extends User { }
|
16
|
-
|
17
|
-
class UserStub implements
|
15
|
+
class UserStub implements User { id = null; name = null }
|
18
16
|
|
19
17
|
|
20
18
|
|