回答編集履歴
5
引用が中途半端だったので
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
文章の修正
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
> せめてUser型はuserPropertysの値全てをkeyに持たないとコンパイルエラー
|
2
2
|
|
3
|
-
userPropertys を
|
3
|
+
userPropertys を User を実装したクラスのオブジェクトから生成するようにすればコンパイルエラーを起こすことはできます。
|
4
4
|
|
5
5
|
```TypeScript
|
6
6
|
type User = { id: string; name: string }
|
3
文章の修正
answer
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
}
|
17
17
|
```
|
18
18
|
|
19
|
-
上記実装の場合は User のプロパティを消せば userPropertys.includes(value) でエラーが起き、UserStub のプロパティを消せば
|
19
|
+
上記実装の場合は User のプロパティを消せば userPropertys.includes(value) でエラーが起き、UserStub のプロパティを消せば User を満たさなくなりエラーが起きます。
|
20
20
|
|
21
21
|
> ユーザー定義型ガードを実装する上で使用したいから
|
22
22
|
|
2
コード微修正
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 いらなかった
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
|
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']
|