컴파일의 strict옵션들은 개발자가 코딩을 할 때, 보다 타이핑 규칙을 엄격하게 지킬 수 있도록 관리하게 해주는 옵션이다. 이 옵션은 default로 true
로 설정되어있고, 이를 풀지 않고 코딩하는 것을 권장한다. ts의 "타이핑 기능을 통한 예기치 않은 오류 최소화" 의의를 지켜야 하기 때문이다.
ts 컴파일러에서 사용되는 옵션 중 하나로, 명시적인 타입 선언이 없는 경우 any
타입을 자동으로 할당하지 않도록 하는 역할을 한다. 이를 활성화하면 함수의 반환값이나 변수의 타입이 명시되지 않았을 때, 해당 값들은 암시적으로 any
타입이 아닌 실제 타입으로 추론되어야 한다.
이 옵션을 사용하면 코드의 안정성을 향상시키고, 암시적으로 any
타입을 사용하는 것을 방지함으로써 타입 관련 오류를 줄일 수 있다. 하지만 타입을 명시적으로 지정하지 않아도 되는 편리함을 잃을 수 있다는 단점도 있지만, 이를 통해 코드의 가독성과 유지보수성을 높일 수 있다.
메서드 내부에서 사용되는 this
의 타입이 명시되지 않았을 때 경고를 발생시키는 역할을 한다. 이를 통해 함수나 메서드 내부에서 this
의 타입을 명시적으로 선언하여, 해당 메서드가 어떤 객체에서 호출되는지 명확하게 지정할 수 있다.
이 옵션을 사용하면 this
에 대한 타입 안전성을 확보하고, 런타임에서 this
가 예상치 않은 객체를 가리키는 오류를 방지할 수 있다.
null
과 undefined
값을 다른 타입에 할당할 수 없도록 강제하는 역할을 한다. 이를 통해 값이 존재하지 않을 수 있는 상황에서의 잠재적인 오류를 줄이고 안전한 코드를 작성할 수 있도록 도와준다.
이 옵션을 활성화하면 변수나 매개변수에 null
또는 undefined
를 할당하는 것이 불가능하며, 이러한 값들을 다루는 코드를 안정화시킬 수 있다.
함수 타입 간의 할당 시 매개변수의 타입이 더 제한적이지 않으면 에러를 발생시키는 역할을 한다. 이를 통해 함수의 타입 호환성을 더 엄격하게 제어하여 의도하지 않은 동작을 방지한다.
예를 들어, 함수 타입 A의 매개변수 타입이 함수 타입 B의 매개변수 타입을 포함하는 경우, strictFunctionTypes
를 활성화하면 타입 호환성 에러가 발생하여 이를 방지한다.
클래스의 프로퍼티가 생성자나 초기화 메서드를 통해 반드시 초기화되어야 함을 강제하는 역할을 한다. 이를 통해 프로퍼티의 초기화 상태를 보장하여 런타임에서 발생할 수 있는 undefined
값 문제를 예방한다.
클래스의 프로퍼티가 생성자에서 초기화되지 않으면 컴파일 오류가 발생하며, 클래스의 안정성과 코드 예측 가능성을 높일 수 있다.
함수의 bind, call, apply 메서드의 사용에 엄격한 타입 검사를 수행하도록 한다. 이를 통해 이러한 메서드를 사용할 때 인수와 호출되는 함수 간의 타입 호환성을 체크하여 타입 관련 문제를 사전에 방지한다.
alwaysStrict
옵션을 활성화하면 ts 컴파일러는 모든 생성된 js 코드에 "use strict"
를 추가한다. 엄격 모드로 코드가 실행되도록 보장하며, js 코드의 일관성을 높이고 오류 가능성을 줄이는 역할을 한다.
이러한
"strict"
모드의 서브 옵션들은 ts 코드의 안전성을 향상시키고 예기치 않은 오류를 사전에 방지하기 위해 사용된다 코드의 복잡도나 크기에 따라서 모든 옵션을 동시에 활성화하지 않을 수도 있으며, 프로젝트의 요구 사항에 따라 선택적으로 사용하는 것도 방법이다. 초기 개발자는 strict 옵션들이 생성하는 경고와 에러를 해결하며 코드를 수정하는 데 시간을 투자하며 ts를 이해하는 것이 좋다.