웹사이트 검색

typescript - ESM 모듈에서 'tsconfig.json'의 --always-strict 생략하기


ESM & "use strict"


다음 tsconfig.json 플래그가 출시된 이후...

  • $ tsc --module "Node16"
  • $ tsc --moduleResolution "Node16"

...저는 오직 ES6 표준화된 자바스크립트 모듈만 "TypeScript"로 작성해왔습니다. 제가 이해하기로는, 자바스크립트 문서에 "use strict";를 추가하는 것은 문서에 파싱 지시문을 추가하는 것과 같습니다(어쩌면 실제로 파싱 지시문일지도 모르지만, 정확히는 모릅니다). 이 고유한 구문은 자바스크립트 엔진에게 (JS 엔진이 해당 구문을 해석할 때) 특정 규칙들이 적용되어야 함을 알립니다.

"use strict" 규칙에는 다음이 포함되지만 이에 국한되지 않습니다...

  • arguments.callee는 허용되지 않습니다
  • with 키워드는 허용되지 않습니다
  • 객체의 키는 고유해야 합니다
  • 그리고 지금 바로 기억나지 않는 몇몇 다른 것들...

2B 프랭크, "use strict"의 세부 사항은 이 질문의 맥락에서는 그리 중요하지 않습니다. 정말 중요한 것은 제가 use-strict 규칙이 ES 모듈에서 어떻게 구현되는지 이해하는 것입니다. 제가 이해하기로는, 그것들은 ESM 표준의 명세의 일부이므로, ES 모듈의 파일에 "use strict";를 추가할 필요가 없습니다.

TSC --alwaysStrict 플래그


TypeScriptLang.org 문서에 따르면 tsc 플래그 "alwaysStrict": true는 각 파일이 상단에 "use strict";를 포함하도록 보장합니다. ESM이 "use strict" 규칙을 구현하므로, 파일에 "use strict"; 문을 추가할 필요가 없다면, ESM 프로젝트의 tsconfig.json 파일에 단순히 "alwaysStrict": true를 추가하지 않아도 안전하지 않을까요?

원래 제가 질문한 이유는 GitLab과 GitHub에서 제가 팔로우하던 몇 가지 저장소가 있었기 때문인데, 그중 어느 것도 'alwaysStrict'를 생략하지 않았다는 것을 알게 되었습니다. 모두 여전히 그것을 포함하고 있었습니다. 그 후 원래 질문이 작성된 이후의 댓글에서 또 다른 측면이 저에게 명확하게 제시되었습니다(그 이후로 저는 맞춤법과 문법 오류, 이어지는 문장, 잘못된 명명법을 수정하면서 질문을 편집했습니다).

간단히 말해서, 제가 하고 싶은 것은 부정적인 결과의 위험 없이 할 수 있다면 'alwaysStrict'를 제거하는 것입니다. 즉, 쓸모가 없다면 왜 그것을 가져야 하나요? 그래서 제가 알고 싶은 것은 안전하게 제거할 수 있는 방법이 있는지, 아니면 제거할 때의 가능한 영향이 무엇인지입니다. 그냥 공간 낭비일 뿐인지, 아니면 여전히 tsconfig.json 파일에 'alwaysStrict'를 두거나 생성된 JavaScript 프로젝트 빌드 파일에 'use strict'를 유지하고 싶은 경우가 있는지입니다.