TypeScript 7 యొక్క కొత్త Go-ఆధారిత కంపైలర్, tsgo, ESLint, ts-jest మరియు ts-morph వంటి ప్రముఖ డెవలప్‌మెంట్ టూల్స్‌ను ఇప్పటికే దెబ్బతీస్తోంది. రాబోయే 7.1 రిలీజ్‌లో కంపైలర్ యొక్క ప్రోగ్రామాటిక్ API స్థిరపడే వరకు ఈ సమస్య కొనసాగుతుంది, అంటే ఈ టూల్స్‌పై ఆధారపడే టీమ్‌లు తమ అప్‌గ్రేడ్ ప్లాన్స్‌ను తాత్కాలికంగా నిలిపివేయాలి.

TypeScript 7లో ఏ మారింది

ఈ రిలీజ్ tsgoని పరిచయం చేసింది, ఇది TypeScript టీమ్ Project Corsa అని పిలిచిన టైప్-చెకర్ యొక్క Go పోర్ట్. కోర్‌ను JavaScript నుండి Goకి మార్చడం ద్వారా, ఈ కంపైలర్ పది రెట్లు వేగంగా బిల్డ్స్‌ను అందించగలదు, ఇది CI పైప్‌లైన్‌లలో సమయాన్ని తగ్గించుకోవాలనుకునే డెవలపర్లను ఆకర్షించింది.

టూల్స్ ఎందుకు విఫలమవుతున్నాయి

TypeScriptతో పనిచేసే టూల్స్ నేరుగా టైప్-చెకర్‌తో సంభాషించవు. అవి టైప్ సమాచారం, డయాగ్నోస్టిక్స్ మరియు AST ట్రావర్సల్‌ను ఎక్స్‌పోజ్ చేసే అంతర్గత APIల సమితిని పిలుస్తాయి. ఆ APIలను tsgo కోసం తిరిగి రాశారు మరియు వెర్షన్ 7.1 వరకు అవి మార్పులకు లోనవుతూనే ఉంటాయి. దీని ఫలితంగా క్రాష్‌లు మరియు సైలెంట్ ఫెయిల్యూర్స్ (silent failures) సంభవిస్తున్నాయి:

  • typescript-eslint – TypeScript 7తో పాటు దీనిని ఇన్‌స్టాల్ చేయడానికి npm నిరాకరిస్తుంది; బలవంతంగా ఇన్‌స్టాల్ చేస్తే ESLint TypeErrorను చూపిస్తుంది.
  • ts-jest – Go వెర్షన్‌లో లేని అంతర్గత మెథడ్స్‌ను పిలవడానికి ప్రయత్నిస్తుంది, దీనివల్ల టెస్ట్-ఫైల్ ట్రాన్స్‌ఫార్మేషన్ ఆగిపోతుంది.
  • ts-morph – కోడ్ స్ట్రక్చర్‌ను విశ్లేషించడానికి స్థిరమైన APIని ఆశిస్తుంది; ప్రస్తుత APIతో ఇది తప్పు ఫలితాలను ఇవ్వవచ్చు లేదా హెచ్చరిక లేకుండా విఫలం కావచ్చు.
  • Monorepos – tsgo కొన్ని జెనరిక్ టైప్ పారామీటర్లను వదిలివేస్తుంది, దీనివల్ల పెద్ద, మల్టీ-ప్యాకేజీ ప్రాజెక్ట్‌లలో మాత్రమే కనిపించే టైప్ ఎర్రర్స్ వస్తాయి.

TypeScript 7తో కలిసి linting, Jest testing లేదా code-analysis చేసే ఏ వర్క్‌ఫ్లోలోనైనా బిల్డ్స్ ఫెయిల్ అయ్యే (red builds) అవకాశం ఉంది.

ఎవరిపై ప్రభావం చూపుతుంది

  • ప్రతి pull requestలో భాగంగా ESLintని ఉపయోగించే ఫ్రంట్-ఎండ్ టీమ్‌లు.
  • యూనిట్ టెస్టింగ్ కోసం ts-jestపై ఆధారపడే బ్యాక్-ఎండ్ సర్వీసెస్.
  • కోడ్ జనరేషన్ లేదా డాక్యుమెంటేషన్ కోసం ts-morphని ఉపయోగించే లైబ్రరీలు.
  • టైప్ ఇన్ఫరెన్స్ (type inference) ఇప్పటికే సంక్లిష్టంగా ఉన్న మోనోరెపో సెటప్‌లు కలిగిన సంస్థలు.

TypeScript అప్‌గ్రేడ్ తర్వాత మీ CI పైప్‌లైన్ ఫెయిల్ (red) అయితే, దానికి పైన పేర్కొన్న వాటిలో ఏదో ఒకటి కారణం కావచ్చు.

7.1 వరకు సురక్షితమైన మైగ్రేషన్ మార్గం

టూల్స్‌ను దెబ్బతీయకుండా వేగాన్ని పొందడానికి సులభమైన మార్గం ఏమిటంటే, ఫాస్ట్ టైప్-చెకింగ్ దశను అసలు బిల్డ్ నుండి వేరు చేయడం:

  1. ప్రధాన TypeScript వెర్షన్‌ను 6.xకి ఫిక్స్ చేయండి – ఇది అన్ని టూల్స్ ఆశించే స్థిరమైన APIని ఉంచుతుంది.
  2. @typescript/native-previewని ఒక dev dependencyగా జోడించండి – ఈ ప్యాకేజీ CIలో త్వరిత టైప్-చెకింగ్ కోసం 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"
  }
}

ఈ డ్యూయల్ సెటప్‌తో, మీరు ESLint, ts-jest మరియు ts-morphలతో అనుకూలతను కాపాడుకుంటూనే, CIలో పది రెట్లు వేగవంతమైన పెర్ఫార్మెన్స్‌ను పొందవచ్చు.

మీరు నేరుగా 7.0కి ఎప్పుడు అప్‌గ్రేడ్ చేయవచ్చు

మీ కోడ్‌బేస్ కేవలం tscని మాత్రమే ఉపయోగిస్తుంటే—అంటే linting, Jest లేదా ts-morph లేకపోతే—అప్పుడు అస్థిరమైన API మిమ్మల్ని ప్రభావితం చేయదు. అటువంటి సందర్భంలో, మీరు వెంటనే TypeScript 7కి మారవచ్చు మరియు అదనపు దశలు లేకుండా పెర్ఫార్మెన్స్ మెరుగుదలను పొందవచ్చు.

గమనించవలసినవి

  • వెర్షన్ 7.1 – ఈ రిలీజ్‌లో ప్రోగ్రామాటిక్ API స్థిరపరచబడుతుందని (frozen) TypeScript టీమ్ సూచించింది. అది విడుదలైన తర్వాత, tsgo మరియు ప్రస్తుతం ఉన్న టూలింగ్ మధ్య ఉన్న అంతరం తొలగిపోతుంది, తద్వారా మీరు సులభంగా అప్‌గ్రేడ్ చేయవచ్చు.
  • టూలింగ్ అప్‌డేట్స్typescript-eslint, ts-jest మరియు ts-morph యొక్క కొత్త రిలీజ్‌లపై నిఘా ఉంచండి. 7.1 విడుదలైన వెంటనే అవి అనుకూలమైన వెర్షన్‌లను విడుదల చేస్తాయి.
  • CI కాన్ఫిగరేషన్ – API స్థిరపడిన తర్వాత tsgo --noEmitని సాధారణ tsc కాల్‌తో మార్చడం మర్చిపోవద్దు; అప్పుడు ప్రివ్యూ ప్యాకేజీ అవసరం ఉండదు.

ముఖ్య గమనిక (Takeaway): 7.1 API లాక్-ఇన్ అయ్యే వరకు, మీ ప్రధాన కంపైలర్ కోసం TypeScript 6.xలోనే ఉండండి, వేగవంతమైన చెక్‌ల కోసం @typescript/native-previewని జోడించండి మరియు బిల్డ్స్ కోసం tscని ఉపయోగించడం కొనసాగించండి. ఇది కొత్త Go ఇంజిన్ యొక్క పెర్ఫార్మెన్స్ ప్రయోజనాలను పొందుతూనే, విఫలమయ్యే linting మరియు టెస్టింగ్ సమస్యలను నివారిస్తుంది.