Node.js가 TypeScript를 구현하지 않았습니다.

WBOY
풀어 주다: 2024-08-16 06:05:02
원래의
642명이 탐색했습니다.

Node.js did not implement TypeScript

Node.js가 TypeScript를 구현하지 않은 이유에 대한 간략한 기사

중요한 것 먼저

다음은 TypeScript와 관련하여 Node.js에서 해온 것과 하지 않은 것에 대한 설명입니다.

이 글은 Node.js 팀이나 TypeScript 팀을 비판하려는 의도가 없습니다.

실제로는 그 반대입니다.

저는 Node.js 팀이 자신들이 했던 방식으로 TypeScript를 "구현"한다는 점에서 최선의 선택을 했다고 진심으로 생각합니다.

여기서 제가 정말 강조하고 있는 점은 Node.js가 TypeScript를 구현하지 않았다는 것입니다. 그들은 단지 그것에 대한 일종의 지원을 추가했을 뿐입니다. 이는 Node.js와 TypeScript에 대한 논의에서 종종 간과되는 중요한 차이점입니다.

지난 몇 주 동안 뉴스레터에서 Node.js가 TypeScript를 구현했다는 기사를 50개 이상 인용했습니다.

이제 이 점을 확실히 밝혀야 할 때가 된 것 같습니다.

스포일러 경고: Node.js는 TypeScript를 구현하지 않았습니다.

TypeScript: 간략한 역사와 일부 데이터

2010년에 Microsoft는 언어에 정적 타이핑을 추가하는 JavaScript의 상위 집합인 TypeScript를 출시했습니다. TypeScript는 유형 안전성 부족, 대규모 코드베이스 유지 관리의 어려움 등 JavaScript의 일부 단점을 해결하도록 설계되었습니다. TypeScript는 출시 이후 많은 프로젝트에서 이를 기본 언어로 채택하면서 개발자들 사이에서 인기를 얻었습니다.

최신 JS 현황 조사에 따르면 TypeScript는 거의 모든 곳에 있습니다. 78%의 개발자가 개발 시간의 최소 50% 동안 TypeScript를 사용하므로 "Node.js에 TypeScript를 구현했습니다"라는 반향이 웹의 가장 심오한 구석까지 도달한 것은 당연합니다.

하지만 분명히 말씀드리자면 그런 일은 일어나지 않았습니다. 그리고 아마도 결코 그럴 수 없을 것입니다.

문제

Node.js가 TypeScript를 구현하지 않은 데에는 몇 가지 이유가 있습니다. 제가 생각하는 가장 중요한 두 가지는 다음과 같습니다.

#1: TypeScript는 런타임에 항목을 주입합니다.

런타임에 열거형이 어떻게 되는지 알고 계셨나요? 개체.

이것은 운 좋게도 TypeScript가 런타임에 항목을 주입하는 방법에 대한 몇 가지 예 중 하나일 뿐입니다. 이는 런타임이 TypeScript의 기능을 인식해야 하므로 복잡성과 오버헤드가 많이 발생하므로 Node.js에 문제가 됩니다.

Node.js가 ECMAScript와의 일관성을 유지하고 남은 기간 동안 종속성 관리를 처리할 필요가 없다면 TypeScript를 현재 형식의 종속성으로 받아들일 수 없습니다.

#2: 의미론적 버전 관리.

TypeScript는 의미론적 버전 관리(semver)를 따르지 않습니다.

반면 Node.js는 semver를 엄격하게 따르며 세 가지 릴리스 라인이 있습니다(현재는 18.x, 20.x, 22.x). 이는 마이너 또는 패치 릴리스에 주요 변경 사항이 도입되어 기존 코드와의 호환성 문제가 발생할 수 있음을 의미합니다.

또한 지원하는 플랫폼의 양이 방대해서 모두 확인하기가 쉽지 않습니다.

Node.js는 semver를 중단시킬 수 있기 때문에 TypeScript를 종속성으로 받아들일 수 없습니다. 이는 Node.js가 TypeScript를 구현하는 것을 방해하는 근본적인 문제입니다.

그래서 그들은 무엇을 했나요?

여기서 혼란이 발생합니다. Node.js는 TypeScript를 구현하지 않았지만 실험적 플래그 아래에 유형 제거를 추가했습니다. 이 기능을 사용하면 개발자는 TypeScript 코드를 작성하고 유형 정보 없이 JavaScript로 컴파일할 수 있습니다. 이는 개발자가 위에서 언급한 문제를 발생시키지 않고 Node.js에서 TypeScript를 사용할 수 있도록 하는 절충안입니다.

예를 들어보시겠어요? 여기 있습니다:

function sum(a: number, b: number): number {
  return a + b;
}
로그인 후 복사

이 함수는 --experimental-strip-types 플래그로 컴파일되면 다음과 같습니다.

function sum(a        , b        )         {
  return a + b;
}
로그인 후 복사

보셨나요? 유형이 사라지고 공백으로 대체되었습니다. 그런데 왜?라고 물으실 수도 있습니다. 글쎄, 그렇게 하면 별도의 빌드 프로세스를 거치는 번거로움 없이 소스맵 참조가 보존되기 때문입니다.

내부적으로 이 작업은 실제 스트리핑을 수행하는 잘 알려진 빌드 도구인 swc를 래핑하는 amaro라는 패키지를 통해 수행됩니다.

물론 앞서 언급한 열거형과 같은 TypeScript 전용 기능을 사용할 수 없는 등의 제한 사항이 있습니다. 하지만 여전히 사람들이 합계 함수가 두 숫자를 받아들이고 세 번째 숫자를 반환하도록 135개의 구성 파일을 작성하는 것을 방지하는 것은 큰 진전입니다.

챠오
마이클.

위 내용은 Node.js가 TypeScript를 구현하지 않았습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿