아이템 38

아이템 39

아이템 40

아이템 41 : any의 진화를 이해하기

타입이 any으로 선언을 하였어도, 코드가 작성 됨에 따라 코드의 타입이 변경된다.

즉, 코드가 작성됨에 따라서 타입이 구체화가 된다.

단, 배열을 암시적 any[]로 선언할 경우에는 배열에 값이 들어갈 때 추론이 된다.

function range(start: number, limit: number): number[] {
    const out = [] // out 변수에는 암시적으로 any[] 형식이 포함됩니다.

    if (start === limit) {
        return out; // out 변수에는 암시적으로 any[] 형식이 포함됩니다.
    }

    for (let i=start; i<limit; i++) {
        out.push(i);
    }
    return out; // out 변수에는 암시적으로 any[] 형식이 포함됩니다.
}

function makeSquares(start: number, limit: number) {
    const out = []; // out 변수에는 암시적으로 any[] 형식이 포함됩니다.

    range(start, limit).forEach(i => {
		out.push(i * i);
    });

	return out; // out 변수에는 암시적으로 any[] 형식이 포함됩니다.
}

즉, 배열에 값을 넣는 경우가 있을 때는 추론이 된다.

function range(start: number, limit: number): number[] {
    const out = []; // any[]

		out.push(1);

    if (start === limit) {
        return out; // number[]
    }

    for (let i=start; i<limit; i++) {
        out.push(i); // number[]
    }
    return out; // number[]
}

아이템 42 : 모르는 타입의 값에는 any대신 unknown을 사용하기