Typescript/TypeScript exercises

TypeScript exercises 7번 문제

띵킹 2023. 2. 16. 00:29
interface User {
    type: 'user';
    name: string;
    age: number;
    occupation: string;
}

interface Admin {
    type: 'admin';
    name: string;
    age: number;
    role: string;
}

function logUser(user: User) {
    const pos = users.indexOf(user) + 1;
    console.log(` - #${pos} User: ${user.name}, ${user.age}, ${user.occupation}`);
}

function logAdmin(admin: Admin) {
    const pos = admins.indexOf(admin) + 1;
    console.log(` - #${pos} Admin: ${admin.name}, ${admin.age}, ${admin.role}`);
}

const admins: Admin[] = [
    {
        type: 'admin',
        name: 'Will Bruces',
        age: 30,
        role: 'Overseer'
    },
    {
        type: 'admin',
        name: 'Steve',
        age: 40,
        role: 'Steve'
    }
];

const users: User[] = [
    {
        type: 'user',
        name: 'Moses',
        age: 70,
        occupation: 'Desert guide'
    },
    {
        type: 'user',
        name: 'Superman',
        age: 28,
        occupation: 'Ordinary person'
    }
];

export function swap(v1, v2) {
    return [v2, v1];
}

function test1() {
    console.log('test1:');
    const [secondUser, firstAdmin] = swap(admins[0], users[1]);
    logUser(secondUser);
    logAdmin(firstAdmin);
}

function test2() {
    console.log('test2:');
    const [secondAdmin, firstUser] = swap(users[0], admins[1]);
    logAdmin(secondAdmin);
    logUser(firstUser);
}

function test3() {
    console.log('test3:');
    const [secondUser, firstUser] = swap(users[0], users[1]);
    logUser(secondUser);
    logUser(firstUser);
}

function test4() {
    console.log('test4:');
    const [firstAdmin, secondAdmin] = swap(admins[1], admins[0]);
    logAdmin(firstAdmin);
    logAdmin(secondAdmin);
}

function test5() {
    console.log('test5:');
    const [stringValue, numericValue] = swap(123, 'Hello World');
    console.log(` - String: ${stringValue}`);
    console.log(` - Numeric: ${numericValue}`);
}

[test1, test2, test3, test4, test5].forEach((test) => test());

6번 문제를 풀다 막혔는데 힌트로 잘 모르는 함수 오버로드가 주어져서, typescriptlang.org의 핸드북을 다시 읽고 있다. 

나중에 다시 풀 생각으로 7번을 먼저 풀었다.

하단의 test를 통과하기 위해서는, swap을 통해 서로 뒤집힌 타입의 함수를 실행시킬 수 있게 제네릭을 통해 타입을 뒤바꿔줘야 한다.

export function swap<K, V>(v1:K, v2:V): [V, K] {
    return [v2, v1];
}

 

728x90

'Typescript > TypeScript exercises' 카테고리의 다른 글

TypeScript exercises 9번 문제  (0) 2023.02.16
TypeScript exercises 8번 문제  (0) 2023.02.16
TypeScript exercises 5번 문제  (0) 2023.02.14
TypeScrip texercises 4번 문제  (0) 2023.02.14
TypeScript exercises 3번 문제  (0) 2023.02.14