TypeScript 7 ರ ಹೊಸ Go-ಆಧಾರಿತ ಕಾಂಪೈಲರ್, tsgo, ಈಗಾಗಲೇ ESLint, ts-jest ಮತ್ತು ts-morph ನಂತಹ ಜನಪ್ರಿಯ ಡೆವಲಪ್‌ಮೆಂಟ್ ಟೂಲ್‌ಗಳನ್ನು ಅಸ್ತವ್ಯಸ್ತಗೊಳಿಸುತ್ತಿದೆ. ಮುಂಬರುವ 7.1 ಬಿಡುಗಡೆಯಲ್ಲಿ ಕಾಂಪೈಲರ್‌ನ ಪ್ರೋಗ್ರಾಮ್ಯಾಟಿಕ್ API ಸ್ಥಿರವಾಗುವವರೆಗೆ ಈ ಸಮಸ್ಯೆ ಮುಂದುವರಿಯುತ್ತದೆ, ಅಂದರೆ ಈ ಟೂಲ್‌ಗಳ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿರುವ ತಂಡಗಳು ಯಾವುದೇ ಅಪ್‌ಗ್ರೇಡ್ ಯೋಜನೆಗಳನ್ನು ಸ್ಥಗಿತಗೊಳಿಸಬೇಕು.

TypeScript 7 ರಲ್ಲಿ ಏನ ಬದಲಾಗಿದೆ

ಈ ಬಿಡುಗಡೆಯು tsgo ಅನ್ನು ಪರಿಚಯಿಸಿದೆ, ಇದು TypeScript ತಂಡವು Project Corsa ಎಂದು ಹೆಸರಿಸಿದ type-checker ನ Go ಪೋರ್ಟ್ ಆಗಿದೆ. ಕೋರ್ ಅನ್ನು JavaScript ನಿಂದ Go ಗೆ ವರ್ಗಾಯಿಸುವ ಮೂಲಕ, ಕಾಂಪೈಲರ್ ಹತ್ತು ಪಟ್ಟು ವೇಗವಾಗಿ ಬಿಲ್ಡ್‌ಗಳನ್ನು ನೀಡಬಲ್ಲದು, ಇದು CI ಪೈಪ್‌ಲೈನ್‌ಗಳಲ್ಲಿನ ಸಮಯವನ್ನು ಉಳಿಸಲು ಬಯಸುವ ಆರಂಭಿಕ ಬಳಕೆದಾರರನ್ನು ಆಕರ್ಷಿಸಿದೆ.

ಟೂಲ್‌ಗಳು ಏಕೆ ವಿಫಲವಾಗುತ್ತಿವೆ

TypeScript ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವ ಟೂಲ್‌ಗಳು type-checker ಜೊತೆಗೆ ನೇರವಾಗಿ ಸಂವಹನ ನಡೆಸುವುದಿಲ್ಲ. ಅವು type ಮಾಹಿತಿ, diagnostics ಮತ್ತು AST traversal ಅನ್ನು ಪ್ರದರ್ಶಿಸುವ ಆಂತರಿಕ APIಗಳ ಗುಂಪನ್ನು ಕರೆಯುತ್ತವೆ. ಆ APIಗಳನ್ನು tsgo ಗಾಗಿ ಮರುಬರೆಯಲಾಗಿದೆ ಮತ್ತು ಅವು 7.1 ಆವೃತ್ತಿಯವರೆಗೆ ಬದಲಾಗುತ್ತಲೇ ಇರುತ್ತವೆ. ಇದರ ಪರಿಣಾಮವಾಗಿ ಕ್ರ್ಯಾಶ್‌ಗಳು ಮತ್ತು ಸೈಲೆಂಟ್ ಫೇಲ್ಯರ್‌ಗಳು (silent failures) ಸಂಭವಿಸುತ್ತಿವೆ:

  • typescript-eslint – TypeScript 7 ರ ಜೊತೆಗೆ ಇದನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲು npm ನಿರಾಕರಿಸುತ್ತದೆ; ಬಲವಂತವಾಗಿ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿದರೆ ESLint TypeError ಅನ್ನು ತೋರಿಸುತ್ತದೆ.
  • ts-jest – Go ಆವೃತ್ತಿಯಲ್ಲಿ ಇರದ ಆಂತರಿಕ ಮೆಥಡ್‌ಗಳನ್ನು ಕರೆಯಲು ಪ್ರಯತ್ನಿಸುತ್ತದೆ, ಇದರಿಂದಾಗಿ ಟೆಸ್ಟ್-ಫೈಲ್ ಟ್ರಾನ್ಸ್‌ಫರ್ಮೇಷನ್ (test-file transformation) ಸ್ಥಗಿತಗೊಳ್ಳುತ್ತದೆ.
  • ts-morph – ಕೋಡ್ ರಚನೆಯನ್ನು ಪತ್ತೆಹಚ್ಚಲು ಸ್ಥಿರವಾದ API ಅನ್ನು ನಿರೀಕ್ಷಿಸುತ್ತದೆ; ಪ್ರಸ್ತುತ API ಯೊಂದಿಗೆ ಇದು ತಪ್ಪು ಫಲಿತಾಂಶಗಳನ್ನು ನೀಡಬಹುದು ಅಥವಾ ಎಚ್ಚರಿಕೆ ಇಲ್ಲದೆ ವಿಫಲವಾಗಬಹುದು.
  • Monorepos – tsgo ಕೆಲವು ಜೆನೆರಿಕ್ ಟೈಪ್ ಪ್ಯಾರಾಮೀಟರ್‌ಗಳನ್ನು ಕೈಬಿಡುತ್ತದೆ, ಇದು ದೊಡ್ಡ, ಮಲ್ಟಿ-ಪ್ಯಾಕೇಜ್ ಪ್ರಾಜೆಕ್ಟ್‌ಗಳಲ್ಲಿ ಮಾತ್ರ ಕಾಣಿಸಿಕೊಳ್ಳುವ ಟೈಪ್ ಎರ್‌ರರ್‌ಗಳಿಗೆ ಕಾರಣವಾಗುತ್ತದೆ.

TypeScript 7 ರೊಂದಿಗೆ linting, Jest testing ಅಥವಾ code-analysis ಅನ್ನು ಬೆರೆಸುವ ಯಾವುದೇ ವರ್ಕ್‌ಫ್ಲೋ (workflow) ಕೆಂಪು ಬಿಲ್ಡ್‌ಗಳನ್ನು (red builds) ಕಾಣುವ ಸಾಧ್ಯತೆಯಿದೆ.

ಯಾರು ಬಾಧಿತರಾಗಿದ್ದಾರೆ

  • ಪ್ರತಿ pull request ನ ಭಾಗವಾಗಿ ESLint ಅನ್ನು ರನ್ ಮಾಡುವ ಫ್ರಂಟ್-ಎಂಡ್ ತಂಡಗಳು.
  • ಯೂನಿಟ್ ಟೆಸ್ಟಿಂಗ್‌ಗಾಗಿ ts-jest ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿರುವ ಬ್ಯಾಕ್-ಎಂಡ್ ಸೇವೆಗಳು.
  • ಕೋಡ್ ಜನರೇಷನ್ ಅಥವಾ ಡಾಕ್ಯುಮೆಂಟೇಶನ್‌ಗಾಗಿ ts-morph ಅನ್ನು ಬಳಸುವ ಲೈಬ್ರರಿಗಳು.
  • type inference ಈಗಾಗಲೇ ಸಂಕೀರ್ಣವಾಗಿರುವ monorepo ಸೆಟಪ್ ಹೊಂದಿರುವ ಸಂಸ್ಥೆಗಳು.

TypeScript ಅಪ್‌ಗ್ರೇಡ್ ಮಾಡಿದ ನಂತರ ನಿಮ್ಮ CI ಪೈಪ್‌ಲೈನ್ ಕೆಂಪು ಬಣ್ಣಕ್ಕೆ ತಿರುಗಿದರೆ, ಅದಕ್ಕೆ ಮೇಲಿನವುಗಳಲ್ಲಿ ಯಾವುದಾದರೂ ಒಂದು ಕಾರಣವಾಗಿರಬಹುದು.

7.1 ರವರೆಗೆ ಸುರಕ್ಷಿತ ಮೈಗ್ರೇಷನ್ ಮಾರ್ಗ

ಟೂಲ್‌ಗಳನ್ನು ಹಾನಿಗೊಳಿಸದೆ ವೇಗವನ್ನು ಉಳಿಸಿಕೊಳ್ಳಲು ಸರಳವಾದ ಮಾರ್ಗವೆಂದರೆ, ವೇಗದ type-checking ಹಂತವನ್ನು ನಿಜವಾದ ಬಿಲ್ಡ್‌ನಿಂದ ಬೇರ್ಪಡಿಸುವುದು:

  1. ಮುಖ್ಯ TypeScript ಆವೃತ್ತಿಯನ್ನು 6.x ಗೆ ಪին ಮಾಡಿ – ಇದು ಎಲ್ಲಾ ಟೂಲ್‌ಗಳು ನಿರೀಕ್ಷಿಸುವ ಸ್ಥಿರ API ಅನ್ನು ಉಳಿಸಿಕೊಳ್ಳುತ್ತದೆ.
  2. @typescript/native-preview ಅನ್ನು dev dependency ಆಗಿ ಸೇರಿಸಿ – ಈ ಪ್ಯಾಕೇಜ್ CI ಯಲ್ಲಿ ವೇಗದ type-checking ಗಾಗಿ tsgo binary ಅನ್ನು ಒದಗಿಸುತ್ತದೆ.
  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 ಗೆ ಹೋಗಬಹುದು ಮತ್ತು ಯಾವುದೇ ಹೆಚ್ಚುವರಿ ಹಂತಗಳಿಲ್ಲದೆ ಕಾರ್ಯಕ್ಷಮತೆಯ ಸುಧಾರಣೆಯನ್ನು ಅನುಭವಿಸಬಹುದು.

ಯಾವುದನ್ನು ಗಮನಿಸಬೇಕು

  • Version 7.1 – ಈ ಬಿಡುಗಡೆಯಲ್ಲಿ ಪ್ರೋಗ್ರಾಮ್ಯಾಟಿಕ್ API ಅನ್ನು ಸ್ಥಿರಗೊಳಿಸಲಾಗುವುದು (frozen) ಎಂದು TypeScript ತಂಡವು ಸೂಚಿಸಿದೆ. ಅದು ಬಂದ ನಂತರ, tsgo ಮತ್ತು ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಟೂಲಿಂಗ್ ನಡುವಿನ ಕೊಂಡಿ ಮಾಯವಾಗುತ್ತದೆ, ಇದು ಸುಗಮ ಅಪ್‌ಗ್ರೇಡ್‌ಗೆ ಅವಕಾಶ ಮಾಡಿಕೊಡುತ್ತದೆ.
  • Tooling updatestypescript-eslint, ts-jest ಮತ್ತು ts-morph ನ ಹೊಸ ಬಿಡುಗಡೆಗಳ ಮೇಲೆ ಕಣ್ಣಿಡಿ. 7.1 ಬಿಡುಗಡೆಯಾದ ತಕ್ಷಣ ಅವು ಹೊಂದಾಣಿಕೆಯ ಆವೃತ್ತಿಗಳನ್ನು ಪ್ರಕಟಿಸುತ್ತವೆ.
  • CI configuration – API ಸ್ಥಿರವಾದ ನಂತರ tsgo --noEmit ಅನ್ನು ಸಾಮಾನ್ಯ tsc ಕರಲ್‌ನೊಂದಿಗೆ ಬದಲಾಯಿಸಲು ಮರೆಯಬೇಡಿ; ಆಗ ಪ್ರಿವ್ಯೂ ಪ್ಯಾಕೇಜ್‌ನ ಅಗತ್ಯವಿರುವುದಿಲ್ಲ.

Takeaway: 7.1 API ಲಾಕ್-ಇನ್ ಆಗುವವರೆಗೆ, ನಿಮ್ಮ ಮುಖ್ಯ ಕಾಂಪೈಲರ್‌ಗಾಗಿ TypeScript 6.x ಅನ್ನು ಬಳಸಿ, ವೇಗದ ಪರಿಶೀಲನೆಗಾಗಿ @typescript/native-preview ಅನ್ನು ಸೇರಿಸಿ ಮತ್ತು ಬಿಲ್ಡ್‌ಗಳಿಗಾಗಿ tsc ಅನ್ನು ಬಳಸುವುದನ್ನು ಮುಂದುವರಿಸಿ. ಇದು ಹೊಸ Go ಇಂಜಿನ್‌ನ ಕಾರ್ಯಕ್ಷಮತೆಯ ಪ್ರಯೋಜನಗಳನ್ನು ಪಡೆಯುವಾಗ ಅಸ್ತವ್ಯಸ್ತಗೊಂಡ linting ಮತ್ತು ಟೆಸ್ಟಿಂಗ್ ಅನ್ನು ತಪ್ಪಿಸುತ್ತದೆ.