Typescript의 Strict Options

eeensu·2023년 8월 3일
0

typescript

목록 보기
8/22
post-thumbnail

컴파일의 strict옵션들은 개발자가 코딩을 할 때, 보다 타이핑 규칙을 엄격하게 지킬 수 있도록 관리하게 해주는 옵션이다. 이 옵션은 default로 true로 설정되어있고, 이를 풀지 않고 코딩하는 것을 권장한다. ts의 "타이핑 기능을 통한 예기치 않은 오류 최소화" 의의를 지켜야 하기 때문이다.


noImplicitAny

ts 컴파일러에서 사용되는 옵션 중 하나로, 명시적인 타입 선언이 없는 경우 any 타입을 자동으로 할당하지 않도록 하는 역할을 한다. 이를 활성화하면 함수의 반환값이나 변수의 타입이 명시되지 않았을 때, 해당 값들은 암시적으로 any 타입이 아닌 실제 타입으로 추론되어야 한다.

이 옵션을 사용하면 코드의 안정성을 향상시키고, 암시적으로 any 타입을 사용하는 것을 방지함으로써 타입 관련 오류를 줄일 수 있다. 하지만 타입을 명시적으로 지정하지 않아도 되는 편리함을 잃을 수 있다는 단점도 있지만, 이를 통해 코드의 가독성과 유지보수성을 높일 수 있다.


noImplicitThis

메서드 내부에서 사용되는 this의 타입이 명시되지 않았을 때 경고를 발생시키는 역할을 한다. 이를 통해 함수나 메서드 내부에서 this의 타입을 명시적으로 선언하여, 해당 메서드가 어떤 객체에서 호출되는지 명확하게 지정할 수 있다.

이 옵션을 사용하면 this에 대한 타입 안전성을 확보하고, 런타임에서 this가 예상치 않은 객체를 가리키는 오류를 방지할 수 있다.


strictNullChecks

nullundefined 값을 다른 타입에 할당할 수 없도록 강제하는 역할을 한다. 이를 통해 값이 존재하지 않을 수 있는 상황에서의 잠재적인 오류를 줄이고 안전한 코드를 작성할 수 있도록 도와준다.

이 옵션을 활성화하면 변수나 매개변수에 null 또는 undefined를 할당하는 것이 불가능하며, 이러한 값들을 다루는 코드를 안정화시킬 수 있다.


strictFunctionTypes

함수 타입 간의 할당 시 매개변수의 타입이 더 제한적이지 않으면 에러를 발생시키는 역할을 한다. 이를 통해 함수의 타입 호환성을 더 엄격하게 제어하여 의도하지 않은 동작을 방지한다.

예를 들어, 함수 타입 A의 매개변수 타입이 함수 타입 B의 매개변수 타입을 포함하는 경우, strictFunctionTypes를 활성화하면 타입 호환성 에러가 발생하여 이를 방지한다.


strictPropertyInitialization

클래스의 프로퍼티가 생성자나 초기화 메서드를 통해 반드시 초기화되어야 함을 강제하는 역할을 한다. 이를 통해 프로퍼티의 초기화 상태를 보장하여 런타임에서 발생할 수 있는 undefined 값 문제를 예방한다.

클래스의 프로퍼티가 생성자에서 초기화되지 않으면 컴파일 오류가 발생하며, 클래스의 안정성과 코드 예측 가능성을 높일 수 있다.


strictBindCallApply

함수의 bind, call, apply 메서드의 사용에 엄격한 타입 검사를 수행하도록 한다. 이를 통해 이러한 메서드를 사용할 때 인수와 호출되는 함수 간의 타입 호환성을 체크하여 타입 관련 문제를 사전에 방지한다.


alwaysStrict

alwaysStrict 옵션을 활성화하면 ts 컴파일러는 모든 생성된 js 코드에 "use strict"를 추가한다. 엄격 모드로 코드가 실행되도록 보장하며, js 코드의 일관성을 높이고 오류 가능성을 줄이는 역할을 한다.



이러한 "strict" 모드의 서브 옵션들은 ts 코드의 안전성을 향상시키고 예기치 않은 오류를 사전에 방지하기 위해 사용된다 코드의 복잡도나 크기에 따라서 모든 옵션을 동시에 활성화하지 않을 수도 있으며, 프로젝트의 요구 사항에 따라 선택적으로 사용하는 것도 방법이다. 초기 개발자는 strict 옵션들이 생성하는 경고와 에러를 해결하며 코드를 수정하는 데 시간을 투자하며 ts를 이해하는 것이 좋다.

profile
안녕하세요! 26살 프론트엔드 개발자입니다! (2024/03 ~)

0개의 댓글