回答編集履歴

5

引用が中途半端だったので

2021/09/14 07:19

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -1,4 +1,4 @@
1
- > せめてUser型はuserPropertysの値全てをkeyに持たないとコンパイルエラー
1
+ > せめてUser型はuserPropertysの値全てをkeyに持たないとコンパイルエラーとなるとか、userPropertysに列挙された値のみkeyに持てるとか、両者の繋がりを作ることでそういった安全性が欲しい
2
2
 
3
3
 
4
4
 

4

文章の修正

2021/09/14 07:19

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- userPropertys を class から生成するようにすればコンパイルエラーを起こすことはできます。
5
+ userPropertys を User を実装したクラスのオブジェクトから生成するようにすればコンパイルエラーを起こすことはできます。
6
6
 
7
7
 
8
8
 

3

文章の修正

2021/09/14 07:06

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -34,7 +34,7 @@
34
34
 
35
35
 
36
36
 
37
- 上記実装の場合は User のプロパティを消せば userPropertys.includes(value) でエラーが起き、UserStub のプロパティを消せば IUser を満たさなくなりエラーが起きます。
37
+ 上記実装の場合は User のプロパティを消せば userPropertys.includes(value) でエラーが起き、UserStub のプロパティを消せば User を満たさなくなりエラーが起きます。
38
38
 
39
39
 
40
40
 

2

コード微修正

2021/09/14 07:02

投稿

BluOxy
BluOxy

スコア2663

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 いらなかった

2021/09/14 07:00

投稿

BluOxy
BluOxy

スコア2663

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 IUser { id = null; name = null }
15
+ class UserStub implements User { id = null; name = null }
18
16
 
19
17
 
20
18