質問するログイン新規登録

回答編集履歴

5

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

2021/09/14 07:19

投稿

BluOxy
BluOxy

スコア2663

answer CHANGED
@@ -1,4 +1,4 @@
1
- > せめてUser型はuserPropertysの値全てをkeyに持たないとコンパイルエラー
1
+ > せめてUser型はuserPropertysの値全てをkeyに持たないとコンパイルエラーとなるとか、userPropertysに列挙された値のみkeyに持てるとか、両者の繋がりを作ることでそういった安全性が欲しい
2
2
 
3
3
  userPropertys を User を実装したクラスのオブジェクトから生成するようにすればコンパイルエラーを起こすことはできます。
4
4
 

4

文章の修正

2021/09/14 07:19

投稿

BluOxy
BluOxy

スコア2663

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  > せめてUser型はuserPropertysの値全てをkeyに持たないとコンパイルエラー
2
2
 
3
- userPropertys を class から生成するようにすればコンパイルエラーを起こすことはできます。
3
+ userPropertys を User を実装したクラスのオブジェクトから生成するようにすればコンパイルエラーを起こすことはできます。
4
4
 
5
5
  ```TypeScript
6
6
  type User = { id: string; name: string }

3

文章の修正

2021/09/14 07:06

投稿

BluOxy
BluOxy

スコア2663

answer CHANGED
@@ -16,7 +16,7 @@
16
16
  }
17
17
  ```
18
18
 
19
- 上記実装の場合は User のプロパティを消せば userPropertys.includes(value) でエラーが起き、UserStub のプロパティを消せば IUser を満たさなくなりエラーが起きます。
19
+ 上記実装の場合は User のプロパティを消せば userPropertys.includes(value) でエラーが起き、UserStub のプロパティを消せば User を満たさなくなりエラーが起きます。
20
20
 
21
21
  > ユーザー定義型ガードを実装する上で使用したいから
22
22
 

2

コード微修正

2021/09/14 07:02

投稿

BluOxy
BluOxy

スコア2663

answer CHANGED
@@ -4,9 +4,9 @@
4
4
 
5
5
  ```TypeScript
6
6
  type User = { id: string; name: string }
7
+ class UserStub implements User { id = null; name = null; }
8
+
7
9
  type UserKeys = Array<keyof User>;
8
- class UserStub implements User { id = null; name = null }
9
-
10
10
  const userPropertys: UserKeys = Object.keys(new UserStub()) as UserKeys;
11
11
  console.log(userPropertys); // (2) ['id', 'name']
12
12
 

1

interface いらなかった

2021/09/14 07:00

投稿

BluOxy
BluOxy

スコア2663

answer CHANGED
@@ -5,8 +5,7 @@
5
5
  ```TypeScript
6
6
  type User = { id: string; name: string }
7
7
  type UserKeys = Array<keyof User>;
8
- interface IUser extends User { }
9
- class UserStub implements IUser { id = null; name = null }
8
+ class UserStub implements User { id = null; name = null }
10
9
 
11
10
  const userPropertys: UserKeys = Object.keys(new UserStub()) as UserKeys;
12
11
  console.log(userPropertys); // (2) ['id', 'name']