TypeScript 7-ன் புதிய Go-அடிப்படையிலான கம்பைலர், tsgo, ESLint, ts-jest மற்றும் ts-morph போன்ற பிரபலமான டெவலப்மென்ட் டூல்களை ஏற்கனவே பாதித்து வருகிறது. கம்பைலரின் programmatic API வரவிருக்கும் 7.1 வெளியீட்டில் நிலையானதாக மாறும் வரை இந்த பாதிப்பு தொடரும், எனவே இந்த டூல்களை நம்பியிருக்கும் குழுக்கள் தங்களது அப்டேட் திட்டங்களை தற்காலிகமாக நிறுத்தி வைப்பது நல்லது.

TypeScript 7-இல் என்ன மாறியுள்ளது

இந்த வெளியீடு tsgo-வை அறிமுகப்படுத்தியுள்ளது, இது TypeScript குழுவினர் Project Corsa என்று பெயரிட்ட type-checker-ன் Go போர்ட் (port) ஆகும். அதன் கோரை (core) JavaScript-லிருந்து Go-விற்கு மாற்றுவதன் மூலம், கம்பைலர் பத்து மடங்கு வேகமான பில்டுகளை (builds) வழங்க முடியும். இது CI pipelines-ல் நேரத்தைச் சேமிக்க விரும்பும் பயனர்களை ஈர்த்துள்ளது.

டூல்கள் ஏன் தோல்வியடைகின்றன

TypeScript உடன் செயல்படும் டூல்கள் நேரடியாக type-checker-உடன் தொடர்பு கொள்வதில்லை. அவை type information, diagnostics மற்றும் AST traversal ஆகியவற்றை வெளிப்படுத்தும் ஒரு செட் (set) இன்டர்னல் API-களை அழைக்கின்றன. அந்த API-கள் tsgo-விற்காக மீண்டும் எழுதப்பட்டுள்ளன மற்றும் பதிப்பு 7.1 வரும் வரை அவை மாற்றமடைந்து கொண்டே இருக்கும். இதன் விளைவாக தொடர்ச்சியான கிராஷ்கள் (crashes) மற்றும் அமைதியான தோல்விகள் (silent failures) ஏற்படுகின்றன:

  • typescript-eslint – TypeScript 7-உடன் இதை இன்ஸ்டால் செய்ய npm மறுக்கிறது; கட்டாயமாக இன்ஸ்டால் செய்தால் ESLint ஒரு TypeError-ஐத் தூண்டுகிறது.
  • ts-jest – Go பதிப்பில் இல்லாத இன்டர்னல் மெத்தட்களை (internal methods) அழைக்க முயற்சிப்பதால், டெஸ்ட்-ஃபைல் டிரான்ஸ்ஃபார்மேஷன் (test-file transformation) பாதியில் நிற்கிறது.
  • ts-morph – கோட் கட்டமைப்பை (code structure) ஆய்வு செய்ய நிலையான API-ஐ எதிர்பார்க்கிறது; தற்போதைய API மூலம் இது தவறான முடிவுகளைத் தரலாம் அல்லது எச்சரிக்கையின்றி தோல்வியடையலாம்.
  • Monorepos – tsgo சில ஜெனரிக் டைப் பாராமீட்டர்களை (generic type parameters) நீக்குகிறது, இது பெரிய, மல்டி-பேக்கேஜ் (multi-package) புராஜெக்ட்களில் டைப் எரர்களை (type errors) ஏற்படுத்துகிறது.

Linting, Jest testing அல்லது code-analysis ஆகியவற்றை TypeScript 7 உடன் இணைக்கும் எந்தவொரு பணிப்பாய்விலும் (workflow) 'red builds' ஏற்பட வாய்ப்புள்ளது.

யார் பாதிக்கப்படுகிறார்கள்

  • ஒவ்வொரு pull request-இன் ஒரு பகுதியாகவும் ESLint-ஐப் பயன்படுத்தும் Front-end குழுக்கள்.
  • யூனிட் டெஸ்டிங்கிற்கு (unit testing) ts-jest-ஐ நம்பியிருக்கும் Back-end சேவைகள்.
  • கோட் ஜெனரேஷன் (code generation) அல்லது டாக்குமெண்டேஷனுக்காக ts-morph-ஐப் பயன்படுத்தும் லைப்ரரிகள் (libraries).
  • டைப் இன்ஃபரன்ஸ் (type inference) ஏற்கனவே சிக்கலான நிலையில் உள்ள Monorepo அமைப்பைக் கொண்ட நிறுவனங்கள்.

உங்கள் TypeScript அப்டேட்டிற்குப் பிறகு CI pipeline 'red' ஆகிவிட்டால், அதற்கு மேலே உள்ளவற்றில் ஒன்றுதான் காரணமாக இருக்கலாம்.

7.1 வரை பாதுகாப்பான மைக்ரேஷன் வழிமுறை (migration path)

டூல்களைப் பாதிக்காமல் வேகத்தைப் பெற எளிமையான வழி, வேகமான type-checking படிநிலையை உண்மையான பில்டிலிருந்து (build) பிரிப்பதாகும்:

  1. முக்கிய TypeScript பதிப்பை 6.x-இல் நிலைநிறுத்துங்கள் (Pin) – இது அனைத்து டூல்களும் எதிர்பார்க்கும் நிலையான API-ஐத் தக்கவைக்கும்.
  2. @typescript/native-preview-ஐ ஒரு dev dependency-யாகச் சேர்க்கவும் – இந்த பேக்கேஜ் CI-இல் விரைவான type-checking செய்ய tsgo பைனரியை வழங்குகிறது.
  3. விரைவான சோதனைகளுக்கு --noEmit உடன் tsgo-வை இயக்கவும் – இது டைப்களைச் சரிபார்க்கும் ஆனால் அவுட்புட் ஃபைல்களை உருவாக்காது.
  4. உண்மையான பில்டுகளுக்கு கிளாசிக் tsc கம்பைலரைப் பயன்படுத்தவும்tsc இன்னும் JavaScript-ஐ உருவாக்குகிறது மற்றும் 6.x API-ஐப் பின்பற்றுகிறது.
npm install -D typescript@^6.9
npm install -D @typescript/native-preview

உங்கள் package.json ஸ்கிரிப்ட்களைப் புதுப்பிக்கவும்:

{
  "scripts": {
    "typecheck:fast": "tsgo --noEmit",
    "build": "tsc"
  }
}

இந்த இரட்டை அமைப்பின் (dual setup) மூலம், ESLint, ts-jest மற்றும் ts-morph ஆகியவற்றுடன் இணக்கத்தன்மையைப் பேணிக்கொண்டே, CI-இல் பத்து மடங்கு வேக அதிகரிப்பைப் பெற முடியும்.

எப்போது நீங்கள் நேரடியாக 7.0-க்கு அப்டேட் செய்யலாம்

உங்கள் கோட்பேஸ் (codebase) tsc-ஐ மட்டுமே அழைத்தால்—linting, Jest, அல்லது ts-morph எதுவும் இல்லையென்றால்—அன்ஸ்டேபிள் API உங்களைப் பாதிக்காது. அந்தச் சிறிய சூழலில், நீங்கள் உடனடியாக TypeScript 7-க்கு மாறி கூடுதல் பட בליாமல் செயல்திறன் உயர்வை அனுபவிக்கலாம்.

கவனிக்க வேண்டியவை

  • பதிப்பு 7.1 – இந்த வெளியீட்டில் programmatic API நிலையானதாக (frozen) இருக்கும் என்று TypeScript குழு அறிவித்துள்ளது. அது வந்தவுடன், tsgo மற்றும் தற்போதுள்ள டூல்களுக்கு இடையிலான இணைப்பு நீக்கப்பட்டு, எளிதான அப்டேட் சாத்தியமாகும்.
  • டூலிங் அப்டேட்கள் (Tooling updates)typescript-eslint, ts-jest மற்றும் ts-morph ஆகியவற்றின் புதிய வெளியீடுகளைக் கவனித்துக் கொண்டே இருங்கள். 7.1 வெளியான சிறிது நேரத்திலேயே அவை இணக்கமான பதிப்புகளை வெளியிடும்.
  • CI கான்ஃபிகரேஷன் (CI configuration) – API நிலைபெற்றதும், tsgo --noEmit-க்கு பதிலாக வழக்கமான tsc அழைப்பைப் பயன்படுத்த மறக்காதீர்கள்; பிரீவியூ பேக்கேஜ் (preview package) இனித் தேவையில்லை.

சுருக்கம் (Takeaway): 7.1 API லாக்-இன் (lock-in) ஆகும் வரை, உங்கள் முக்கிய கம்பைலருக்கு TypeScript 6.x-இல் இருங்கள், விரைவான சோதனைகளுக்கு @typescript/native-preview-ஐச் சேர்க்கவும், மற்றும் பில்டுகளுக்கு tsc-ஐத் தொடர்ந்து பயன்படுத்தவும். இது புதிய Go இன்ஜின் மூலம் செயல்திறன் பலன்களைப் பெறும்போது, சிதைந்த linting மற்றும் டெஸ்டிங் சிக்கல்களைத் தவிர்க்க உதவும்.