본 게시글은 정확한 정보를 담고있지 않을 수 있으므로 다른 자료도 참고하시길 바랍니다.
만약, 본 게시글이 잘못된 정보를 가지고 있다면 피드백 부탁드립니다. 감사합니다.
let a: number = 123_456_789;
변수 a
는 숫자 123456789
를 할당받았다. 여기서 타입스크립트 컴파일러는 a
가 어떤 데이터 타입인지 할당된 값을 통해 추론할 수 있다.
let a = 123_456_789;
위와 같이 작성하여도, 타입 추론
때문에 타입스크립트 컴파일러는 a
의 데이터 타입을 number
로 정하게 된다.
let b;
변수 b
에는 어떠한 값도 할당되어 있지 않다. 이럴 경우, 컴파일러는 any
라는 타입으로 추론하게 된다.
function anything(number) {
console.log(number);
}
위 코드의 경우 anything
함수의 매개변수 number
는 에러를 발생하는데 number
가 암묵적으로 any
타입을 가지기 때문이라고 한다. 이런 에러 발생을 제거하고 싶다면 tsconifg.json
에 있는 noImplicitAny
속성을 건드려줘야 한다.
// tscconfig.json
"noImplicitAny": true
true
값이므로 any
타입을 명시적으로 정해주라는 상태다. 그러므로, false
값으로 바꾸어서 암묵적으로 any
타입을 가질 수 있도록 설정해보자.
function anything(number) {
console.log(number);
}
그런 다음 위 코드를 다시 에디터에서 본다면, 에러가 사라져있다.
하지만 타입스크립트를 사용하는 이유는 엄격한 타입 컨트롤이므로 암묵적인 타입 지정을 허용한다면 타입스크립트를 사용하고 있는 의미가 퇴색한다. 그러니, 그냥 noImplicitAny
라는 속성이 위와 같은 기능을 한다는 것만 기억해두려한다.
let x = [1, 2, '3'];
위의 경우, 타입이 x
는 any
타입을 가지게 된다.(string|number)[]
로 표현된다. 배열의 3번째 요소가 다른 데이터 타입이기 때문이다. 만약, 전부다 같은 데이터 타입 number
라면,
let x: number[] = [1, 2, 3];
숫자 배열 타입이 될 것이다. 하지만, 타입스크립트의 타입 추론 기능으로 인해 number[]
annotation을 설정하지 않아도 된다.
let x = [1, 2, 3];
당장 코드 상에는 데이터타입이 지정되어있진 않지만, 타입 추론기능으로 인해 x
는 number[]
타입으로 지정된 상태다.