亲善产生幸福,文明带来和谐。——雨果

题目:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/*

Intro:

All 2 users liked the idea of the community. We should go
forward and introduce some order. We are in Germany after all.
Let's add a couple of admins.

Initially, we only had users in the in-memory database. After
introducing Admins, we need to fix the types so that
everything works well together.

Exercise:

Type "Person" is missing, please define it and use
it in persons array and logPerson function in order to fix
all the TS errors.

*/

interface User {
name: string;
age: number;
occupation: string;
}

interface Admin {
name: string;
age: number;
role: string;
}

export type Person = unknown;

export const persons: User[] /* <- Person[] */ = [
{
name: 'Max Mustermann',
age: 25,
occupation: 'Chimney sweep'
},
{
name: 'Jane Doe',
age: 32,
role: 'Administrator'
},
{
name: 'Kate Müller',
age: 23,
occupation: 'Astronaut'
},
{
name: 'Bruce Willis',
age: 64,
role: 'World saver'
}
];

export function logPerson(user: User) {
console.log(` - ${user.name}, ${user.age}`);
}

persons.forEach(logPerson);

// In case you are stuck:
// https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#union-types

输出Error

1
2
3
4
5
6
7
index.ts(44,9): error TS2322: Type '{ name: string; age: number; role: string; }' is not assignable to type 'User'.
Object literal may only specify known properties, and 'role' does not exist in type 'User'.
index.ts(54,9): error TS2322: Type '{ name: string; age: number; role: string; }' is not assignable to type 'User'.
Object literal may only specify known properties, and 'role' does not exist in type 'User'.
test.ts(5,5): error TS2344: Type 'false' does not satisfy the constraint 'true'.
test.ts(12,5): error TS2344: Type 'false' does not satisfy the constraint 'true'.
test.ts(19,5): error TS2344: Type 'false' does not satisfy the constraint 'true'.

答案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/*

Intro:

All 2 users liked the idea of the community. We should go
forward and introduce some order. We are in Germany after all.
Let's add a couple of admins.

Initially, we only had users in the in-memory database. After
introducing Admins, we need to fix the types so that
everything works well together.

Exercise:

Type "Person" is missing, please define it and use
it in persons array and logPerson function in order to fix
all the TS errors.

*/

interface User {
name: string;
age: number;
occupation: string;
}

interface Admin {
name: string;
age: number;
role: string;
}

export type Person = User | Admin;

export const persons: Person[] = [
{
name: 'Max Mustermann',
age: 25,
occupation: 'Chimney sweep'
},
{
name: 'Jane Doe',
age: 32,
role: 'Administrator'
},
{
name: 'Kate Müller',
age: 23,
occupation: 'Astronaut'
},
{
name: 'Bruce Willis',
age: 64,
role: 'World saver'
}
];

export function logPerson(user: Person) {
console.log(` - ${user.name}, ${user.age}`);
}

persons.forEach(logPerson);

// In case you are stuck:
// https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#union-types