20 staatilise analüüsi tööriista, mida iga TypeScripti meeskond vajab

TypeScripti staatilise analüüsi tööriistad: täielik juhend arendusmeeskondadele

TypeScripti tüübisüsteem püüab enne koodi käivitamist kinni märkimisväärse hulga vigu, tüübi mittevastavusi, puuduvaid omadusi ja valesid funktsioonide signatuure. Mida see aga ei suuda tabada, on kõik muu: turvaauke, mis sõltuvad sellest, kuidas andmed rakenduses voolavad, arhitektuurilisi rikkumisi, mis aja jooksul kuhjuvad meeskondade piiride hägustumisel, surnud eksporte, mis jäävad koodibaasi kauaks pärast nende kutsujate eemaldamist, ja asünkroonseid programmeerimisvigu, mis kompileeruvad õigesti, kuid ebaõnnestuvad teatud käitusaja tingimustes. Staatilise analüüsi tööriistad täidavad need lüngad ja õige kombinatsiooni valimine sõltub sellest, mida te tegelikult otsite.

See juhend hõlmab tööriistu, mis on TypeScripti meeskondadele olulised aastal 2026: linting-kiht (ESLint koos typescript-eslintiga, Biome, OxcLint), turvakiht (Semgrep, Snyk Code, SonarQube), arhitektuurikiht (Dependency-Cruiser, Deptrac, Nx), surnud koodi kiht (Knip) ja süvaanalüüsi kiht (ts-morph, TypeScripti kompilaator ise). Iga kihi puhul keskendutakse sellele, mida see tegelikult teeb, kuidas seda konfigureerida ja millal see pole töö jaoks õige tööriist.

Loodud koodibaaside jaoks, millest keegi aru ei saa

SMART TS XL pindadele automaatselt kogu teie koodibaasis tehtud muudatused.

Lisateavet

TypeScripti staatilise analüüsi tööriistad: võrdlustabel

Enne üksikute tööriistade juurde süvenemist kaardistab allolev tabel iga tööriista selle peamise funktsiooni, CI-sobivuse ja ideaalse kasutusjuhtumi järgi. Ükski tööriist ei kata kõiki dimensioone, efektiivne TypeScripti kvaliteedianalüüs nõuab mitme tööriista kihti.

VahendEsmane funktsioonCI-sobivMaksmaParim
ESLint + TypeScript-eslintLinting, stiil, tüübiteadlikud reeglidJahtasutaMeeskonnaülesed kokkulepped, asünkroonse tüübi ohutus
bioomLinting + vormindamineJahtasutaESLint + ilusam asendus, kiirus
OxcLintLinting (ESLint-ühilduv)JahtasutaMonorepos vajab kiiret ebemeajamist
TypeScripti kompilaator (tsc)TüübikontrollJahtasutaTüübivead, range režiimi jõustamine
SemgrepSAST, kohandatud mustridJahTasuta + tasulineTurvaskannimine, kohandatud organisatsioonireeglid
Snyki koodSAST, sõltuvuste turvalisusJahTasuta + tasulineTurvalisusele orienteeritud meeskonnad, IDE integratsioon
SonarQube / SonarCloudKvaliteediväravad, trendide jälgimineJahTasuta + tasulineEttevõtte kvaliteedi armatuurlauad
SonarLintIDE-taseme kvaliteedi tagasisideAinult IDE-stasutaTekstisisesed turvalisuse ja kvaliteedi vihjed
Sõltuvus-CruiserSõltuvusgraafiku jõustamineJahtasutaArhitektuurireeglite valideerimine
DeptracKihi piiride jõustamineJahtasutaPuhas arhitektuur, DDD piirid
NxMonorepo sõltuvuse juhtimineJahTasuta + tasulineMonorepo mooduli piirid
LõikaSurnud kood ja kasutamata ekspordidJahtasutaKasutamata koodi vähendamine mastaabis
ts-morfProgrammiline TS AST analüüsSelektiivnetasutaKohandatud analüüs, koodimoodulid, tööriistad

1. kiht: Linting ja stiil

ESLint koos TypeScript-eslintiga

ESLint jääb TypeScripti lintimise aluseks. typescript-eslint paketiga saab see juurdepääsu TypeScripti tüübiteabele ja saab jõustada reegleid, mis nõuavad tüübi konteksti, millest kõige väärtuslikumad on asünkroonsed reeglid, mis püüavad kinni levinud Promise'i vigu.

sisse lööma

npm install --save-dev typescript-eslint

JavaScript

// eslint.config.js
import tseslint from "typescript-eslint";

export default tseslint.config(
  ...tseslint.configs.strictTypeChecked,
  {
    languageOptions: {
      parserOptions: {
        project: true,
        tsconfigRootDir: import.meta.dirname,
      },
    },
    rules: {
      // Async safety rules -- highest value TypeScript-specific rules
      "@typescript-eslint/no-floating-promises": "error",
      "@typescript-eslint/await-thenable": "error",
      "@typescript-eslint/no-misused-promises": "error",
      "@typescript-eslint/require-await": "warn",
      // Type safety
      "@typescript-eslint/no-explicit-any": "warn",
      "@typescript-eslint/no-unsafe-assignment": "error",
      "@typescript-eslint/no-unsafe-return": "error",
    },
  }
);

Ülaltoodud neli asünkroonreeglit on kõrgeima väärtusega lisamisreeglid, mida TypeScript-Eslint pakub tavalise ESLinti asemel. Need püüavad kinni: käsitlemata lubadusi (ujuvaid lubadusi), await rakendatakse mitte-lubadusväärtustele, lubadused edastatakse tagasihelistustele, mis ootavad sünkroonseid funktsioone, ja asünkroonsed funktsioonid, mis kunagi ei kasuta awaitNeed on mustrid, mis kompileeruvad küll puhtalt, kuid tekitavad teatud tingimustel käitusaja tõrkeid.

Mida ESLint ei suudaFailidevahelise andmevoo analüüs, arhitektuuriliste piiride jõustamine, turvarikkumiste jälgimine või surnud ekspordi tuvastamine. Nende jaoks on vajalikud allpool olevad kihid.

Bioom: moodne ESLint + uhkem asendus

Biome asendab nii ESLinti kui ka Prettieri ühe Rustil põhineva binaarfailiga, mis töötab 25–35 korda kiiremini. See toetab JavaScripti, TypeScripti, JSX-i ja JSON-i. Uutele projektidele või meeskondadele, keda ärritab ESLinti pluginate keerukus ja aeglane jõudlus suurtes koodibaasides, on Biome tugevaim kaasaegne alternatiiv.

sisse lööma

npm install --save-dev --save-exact @biomejs/biome
npx @biomejs/biome init

sisse lööma

# Check and format in one pass
npx @biomejs/biome check --write src/

# CI mode -- no modifications, exit non-zero on any finding
npx @biomejs/biome ci src/

Biome'i pluginate ökosüsteem on väiksem kui ESLinti oma, mis on oluline meeskondade jaoks, kellel on ulatuslikud kohandatud reeglid või raamistikupõhised pluginad. Meeskondadele, kes kasutavad ainult ESLinti põhireegleid ja Prettieri vormingut, pakub Biome samaväärset katvust murdosa täitmisajaga.

OxcLint: Speed-First ESLinti ühilduvus

OxcLint (osa Oxc projektist) käitab ESLintiga ühilduvaid reegleid 50–100 korda kiiremini. See ei asenda kogu ESLinti ökosüsteemi, kuid on kiireim valik CI-torustike jaoks, kus kitkumise aeg on pudelikaelaks.

sisse lööma

npm install --save-dev oxlint
npx oxlint src/

OxcLint on õige valik suurte monorepositooriumide jaoks, kus standardne ESLint võtab minuteid ja tagasisideahela latentsus vähendab pull request'i kvaliteeti. See toimib kõige paremini koos ESLintiga, mitte selle asemel. Kiire tagasisidetee jaoks käivitage OxcLint ja liitmiseelses faasis täieliku reeglite katvuse jaoks ESLint.

2. kiht: tüübikontroll, TypeScripti kompilaator

TypeScripti kompilaator (tsc) ei ole lihtsalt ehitustööriist, vaid peamine staatilise analüüsi mootor tüübitaseme korrektsuse jaoks. Range režiimi lubamine aktiveerib sätted, mis püüavad kinni kõige reaalsemaid vigu:

Json

{
  "compilerOptions": {
    "strict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    "exactOptionalPropertyTypes": true,
    "useUnknownInCatchVariables": true
  }
}

sisse lööma

# Type-check only, no emit -- ideal for CI
npx tsc --noEmit

noUnusedLocals ja noUnusedParameters kompilaatori tasandil püüda kinni kasutamata muutujad ja funktsiooniparameetrid. useUnknownInCatchVariables (TypeScript 4.4+) tüübid püüdsid erandeid järgmiselt: unknown mitte any, sundides enne kasutamist selgesõnalist tüübi kitsendamist.

TypeScripti juhtimisvoo analüüs on sisseehitatud funktsioon, mille kompilaator pakub tingimuslike harude sees tüüpide kitsendamiseks. See ei ole eraldi tööriist, mis võimaldab strict režiim tagab selle täieliku rangusega rakendamise. Kompilaatori juhtimisvoo analüüs mõistab tüübikaitseid, typeof kontrollid, instanceofja diskrimineeritud ametiühingute mustreid.

TSC piirangTypeScripti kompilaator ei leia turvaauke, arhitektuuriliste piiride rikkumisi ega surnud eksporte. See leiab tüübivead ja teeb seda lõplikult.

3. kiht: turvalisus, SAST TypeScripti jaoks

Semgrep: mustripõhine turvaskannimine

Semgrep leiab turvaauke koodimustrite sobitamise abil. TypeScripti puhul suudab see tuvastada SQL-süstimist, XSS-i, kõvakodeeritud volitusi, ebaturvalisi eval kasutus, prototüübi reostus ja ebaturvalised Express.js konfiguratsioonid – mustrid, mis kompileeruvad küll õigesti, aga toovad kaasa ärakasutatavaid haavatavusi.

yaml

# Custom rule: flag user input in SQL queries (TypeScript)
rules:
  - id: ts-sql-injection-risk
    patterns:
      - pattern: |
          const query = `SELECT ... ${$USER_INPUT} ...`;
    message: "User input directly interpolated into SQL -- use parameterized queries"
    languages: [typescript]
    severity: ERROR

sisse lööma

# Run with the community TypeScript security rules
semgrep scan --config=p/typescript --config=p/owasp-top-ten src/

Semgrep täiendab ESLinti, mitte ei konkureeri sellega. ESLint jõustab konventsioone; Semgrep leiab turvalisuse vastaseid mustreid. Enamik TypeScripti meeskondi, kes hoolivad turvalisusest, peaksid kasutama mõlemat.

Snyk kood: masinõppel põhinev SAST IDE integratsiooniga

Snyk Code teostab SAST-i masinõppel põhineva analüüsimootoriga, mis jälgib failide vahelist saastevoogu. See integreerub VS Code'i ja JetBrainsi IDE-dega, tuues leiud esile juba kirjutamise ajal, selle asemel et oodata CI-käivitust.

sisse lööma

npm install --save-dev snyk
npx snyk auth
npx snyk code test

Snyk Code'i arendajakogemusele keskendumine, IDE-sse integreeritud tagasiside, iga leiu juurde kuuluvad parandusettepanekud ja parandusnäited teevad sellest parema valiku olukordades, kus turvaharidus on sama oluline kui turvalisuse tuvastamine.

SonarQube ja SonarLint: kvaliteediväravad ja trendide jälgimine

SonarQube pakub pidevat koodikvaliteedi analüüsi armatuurlaua, trendide jälgimise ja pull request'ide kujunduse abil. TypeScripti puhul tuvastab see vigu, koodilõhna, turvaauke ja dubleerimisi. SonarLint on IDE laiendus, mis kuvab SonarQube'i reegleid lokaalselt.

TypeScripti meeskondade jaoks on SonarCloud (pilvepõhine versioon) lihtsam tee: avalike repositooriumide jaoks tasuta, CI integratsiooniga GitHub Actionsi või GitLab CI kaudu minutitega.

yaml

# .github/workflows/sonar.yml
- name: SonarCloud Scan
  uses: SonarSource/sonarcloud-github-action@master
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

SonarQube'i peamine väärtus toore koodi muutmise ees on selle trendimudel: kuidas koodi kvaliteet aja jooksul areneb, millised komponendid halvenevad ja milline on iga pull-requesti uue koodi kvaliteedi skoor. Need haldusega seotud mõõdikud on see, mida SonarQube teeb, mida ESLint ja Semgrep ei suuda.

4. kiht: arhitektuurianalüüs

Sõltuvus-Cruiser: Mooduli piirireeglite jõustamine

Dependency-Cruiser kontrollib, kas teie imporditud graaf järgib määratletud arhitektuurireegleid. See genereerib visuaalseid sõltuvusgraafe ja ebaõnnestub konfiguratsioonide testimisel, kui kood rikub mooduli piiride piiranguid.

JavaScript

// .dependency-cruiser.cjs
module.exports = {
  forbidden: [
    {
      name: "no-circular",
      severity: "error",
      comment: "Circular dependencies make code hard to test and maintain",
      from: {},
      to: { circular: true },
    },
    {
      name: "no-ui-in-domain",
      severity: "error",
      comment: "Domain modules must not import from UI layer",
      from: { path: "^src/domain" },
      to: { path: "^src/ui" },
    },
    {
      name: "no-external-in-shared",
      severity: "warn",
      comment: "Shared utilities should minimize external dependencies",
      from: { path: "^src/shared" },
      to: { pathNot: "^(src|node_modules/(lodash|date-fns))" },
    },
  ],
};

sisse lööma

npx depcruise --validate .dependency-cruiser.cjs src/

Dependency-Cruiser tegeleb otse otsingukonsooli andmetes esinevate päringutega „reageeri sõltuvusanalüüsi kliitööriist” ning on standardne tööriist sõltuvusgraafikute genereerimiseks ja valideerimiseks TypeScripti/Reacti projektides.

Deptrac: kihtidel põhinev piiride jõustamine

Deptrac jõustab arhitektuurilisi kihte, tagades, et püsivuskoodi ei saa esitlusest importida, et domeeniobjektid ei sõltu infrastruktuurist ja et moodulite piire austatakse kogu koodibaasis.

yaml

# deptrac.yaml
parameters:
  layers:
    - name: Domain
      collectors:
        - type: directory
          value: src/domain
    - name: Application
      collectors:
        - type: directory
          value: src/application
    - name: Infrastructure
      collectors:
        - type: directory
          value: src/infrastructure
  ruleset:
    Domain:
      - ~Infrastructure  # Domain must not depend on Infrastructure
    Application:
      - Domain
    Infrastructure:
      - Application
      - Domain

Deptrac on kõige väärtuslikum projektides, mis järgivad puhta arhitektuuri, DDD või kuusnurkse arhitektuuri mustreid, kus kihtide eraldamine on disainipiirang, mitte ainult eelistus.

Nx: Monorepo tasemel sõltuvuste haldus

TypeScripti monorepode puhul pakub Nx moodulipiiride jõustamist, mõjutatud ehituse tuvastamist ja sõltuvusgraafiku visualiseerimist kõigis repositooriumi projektides.

Json

// .eslintrc.json -- Nx module boundary rules
{
  "rules": {
    "@nx/enforce-module-boundaries": [
      "error",
      {
        "allow": [],
        "depConstraints": [
          { "sourceTag": "scope:shared", "onlyDependOnLibsWithTags": ["scope:shared"] },
          { "sourceTag": "scope:feature", "onlyDependOnLibsWithTags": ["scope:shared", "scope:feature"] },
          { "sourceTag": "scope:app", "onlyDependOnLibsWithTags": ["scope:shared", "scope:feature"] }
        ]
      }
    ]
  }
}

Nx-id affected Käsklused käitavad ainult muudetud moodulitega seotud teste ja lintingut, vähendades oluliselt konfiguratsioonivahetuse aega suurtes monorepodes.

5. kiht: surnud koodi tuvastamine

Knip: Leia kasutamata eksporte, faile ja sõltuvusi

Knip analüüsib kogu mooduli graafikut, et tuvastada kasutamata eksporte, kasutamata faile ja kasutamata üksusi. package.json sõltuvused, koodi kogumise klass, mida ESLint kasutab no-unused-vars ei saa püüda, sest see otsib ainult failist.

sisse lööma

npm install --save-dev knip
npx knip

Json

// knip.json
{
  "entry": ["src/index.ts", "src/**/*.test.ts"],
  "project": ["src/**/*.ts"],
  "ignore": ["src/generated/**"],
  "ignoreDependencies": ["vitest"]
}

Knip otsitakse SC andmetest otse kui „surnud koodi tuvastamine, kasutamata eksport, JavaScripti tüüpkiri”. See on praegu kõige võimekam tööriist mooduli tasemel surnud koodi tuvastamiseks TypeScripti projektides.

6. kiht: programmiline analüüs, ts-morph

ts-morph on TypeScripti kompilaatori API wrapper, mis teeb kohandatud analüüside, koodimoodulite ja tööriistade kirjutamise TypeScripti AST-i vastu lihtsaks. Seda otsitakse otse SC andmetest kui „ts-morph” ja „ts morph”.

masinakiri

import { Project } from "ts-morph";

const project = new Project({ tsConfigFilePath: "tsconfig.json" });

// Find all async functions that never await anything
const suspiciousAsyncFns: string[] = [];

for (const sourceFile of project.getSourceFiles()) {
  for (const fn of sourceFile.getFunctions()) {
    if (fn.isAsync()) {
      const hasAwait = fn.getDescendantsOfKind(
        SyntaxKind.AwaitExpression
      ).length > 0;
      if (!hasAwait) {
        suspiciousAsyncFns.push(
          `${sourceFile.getFilePath()}:${fn.getName() ?? "anonymous"}`
        );
      }
    }
  }
}

console.log("Async functions with no await:", suspiciousAsyncFns);

ts-morph ei ole kohe kasutusvalmis analüüsitööriist, vaid teek, mida selle loomiseks kasutatakse. See sobib meeskondadele, kes vajavad kohandatud analüüsi lisaks olemasolevate tööriistade toetatule: migreerimisskriptid, kohandatud arhitektuurivalideerijad, automatiseeritud refaktoreerimine või koodi genereerimise torujuhtmed.

TypeScripti asünkroonse/ootava staatilise analüüsi

Search Console'i ​​andmed näitavad spetsiifilist päringute klastrit, mis on seotud „typescript static analysis async await paper tool” ja „typescript static analysis async await vulnerability paper tool”. Need peegeldavad praktikuid, kes otsivad tööriistu, mis mõistavad asünkroonsete programmeerimisvigu tüübi tasandil.

TypeScripti meeskondade praktiline vastus on typescript-eslinti neli asünkroonspetsiifilist reeglit (no-floating-promises, await-thenable, no-misused-promises, require-await) koos strictNullChecks ja useUnknownInCatchVariablesKoos püüavad need kinni kõige levinumad asünkroonse tüübi vead ilma akadeemiliste uurimisvahenditeta.

Meeskondadele, kes teevad asünkroonsete haavatavuste mustrite turvauuringuid, on TAJS ja Jelly akadeemilised staatilised analüsaatorid, mis modelleerivad JavaScripti asünkroonse täitmise semantikat, kuid need on uurimisvahendid, mitte tootmisarenduse tööriistad.

Angular ja React: raamistikuspetsiifiline staatiline analüüs

Angle'i meeskondadele, @angular-eslint Pakub Angularispetsiifilisi linting-reegleid, mis hõlmavad komponentide mustreid, mallianalüüsi ja teenuste süstimist. See integreerub ülaltoodud ESLint + typescript-eslint konfiguratsiooniga.

Reacti meeskondadele, eslint-plugin-react, eslint-plugin-react-hooksja eslint-plugin-jsx-a11y pluginad hõlmavad Reacti-spetsiifilisi mustreid. Dependency-Cruiser tegeleb Reacti-spetsiifilise sõltuvusgraafiku analüüsiga ja on tööriist SC-andmete „react dependency analysis cli tool” päringute taga.

IDE integratsioon: tööriistad VS Code'i ja JetBrainsi jaoks

Päringud „parimad koodikvaliteedi tööriistad VS Code'i integratsiooniks” ja „parimad koodikvaliteedi tööriistad IDE integratsiooniks” peegeldavad reaalset vajadust: CI tagasiside saabub liiga hilja, et käitumist muuta. IDE-ga integreeritud analüüs pakub kõige tihedamat tagasisideahelat.

VS koodESLinti laiendus roosteanalüsaatori Clippy pariteediga, SonarLinti laiendus SonarQube'i reeglite jaoks, Snyki laiendus turvaleidude jaoks ja sisseehitatud TypeScripti keele teenus tüübitaseme tagasiside jaoks.

JetBrains (WebStorm/IntelliJ)WebStormil on sisseehitatud TypeScripti tugi, mis kuvab tüübivead tekstisiseselt, ning integratsioon ESLinti, Prettieri ja SonarLintiga. Sisseehitatud kontrollisüsteem katab paljusid samu mustreid kui ESLinti reeglid.

VS Code'i konfiguratsioon TypeScripti staatilise analüüsi maksimaalse ulatuse saavutamiseks:

Json

// .vscode/settings.json
{
  "typescript.tsdk": "node_modules/typescript/lib",
  "typescript.enablePromptUseWorkspaceTsdk": true,
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": "explicit"
  },
  "eslint.validate": ["javascript", "typescript", "typescriptreact"],
  "sonarlint.connectedMode.project": {
    "connectionId": "my-sonarcloud",
    "projectKey": "my-org_my-project"
  }
}

Kuidas SMART TS XL Laiendab TypeScripti analüüsi kogu ettevõttes

Ülaltoodud tööriistad hõlmavad TypeScripti TypeScripti projekti raames. Organisatsioonides, kus TypeScripti teenused suhtlevad COBOLi partiiprogrammide, Java API-de, Pythoni andmekanalite või pärandarvutisüsteemidega, ei näe ühe keele tööriistad sõltuvusi, mis ületavad keelepiire.

SMART TS XL'S staatilise koodi analüüs hõlmab TypeScripti koos kõigi teiste ettevõtluskeskkonnas kasutatavate keeltega (COBOL, JCL, Java, Python, RPG, SQL) ja loob ühtse sõltuvusmudeli nende kõigi vahel. Kui TypeScripti teenus kutsub API-t, mida toetab COBOL-programm, SMART TS XL saab seda suhet jälgida ja lisada mõju analüüs enne kui kummaski komponendis muudatusi tehakse.

. ettevõtte otsing See võimekus muudab kogu mitmekeelse koodibaasi päringutega hallatavaks: leia sekunditega iga konkreetse mooduli TypeScripti import, iga Java-meetod, mida TypeScripti teenus kutsub, iga COBOL-i koopiaraamat, mis edastab andmeid TypeScripti tarbitavale API-le, miljonite koodiridade kaudu mis tahes keelte kombinatsioonis.

Ettevõtte meeskondade jaoks, kes kasutavad TypeScripti ühe keelena suuremas portfoolios, SMART TS XL pakub arhitektuurilist nähtavust ja keeltevahelist nähtavust sõltuvuse kaardistamine mis paneb TypeScripti-spetsiifilised tööriistad vaatama oma osa süsteemist samal ajal SMART TS XL näeb tervikut.

Õige virna loomine

Ükski tööriist ei kata kõiki TypeScripti kvaliteedidimensioone. Õige lähenemisviis on kihiline, kus iga kiht on suunatud kindlale probleemide klassile:

Minimaalne elujõuline virn (uus projekt, väike meeskond):

  • TypeScripti range režiim
  • ESLint koos TypeScript-Eslint asünkroonreeglitega
  • npm audit sõltuvushaavatavuste korral

Tootmisrakenduste pinu (keskmise suurusega meeskond, turvalisusest hooliv):

  • Kõik ülaltoodud, lisaks:
  • Biome või Prettier vormindamiseks
  • Semgrep turvalisuse SAST jaoks
  • Knip surnud koodi jaoks
  • SonarCloud kvaliteetse trendide nähtavuse tagamiseks

Ettevõtte / monorepo pinu (suur meeskond, arhitektuurilised piirangud):

  • Kõik ülaltoodud, lisaks:
  • Dependency-Cruiser mooduli piiride jõustamiseks
  • Nx monorepo mõjutatud ehituse optimeerimiseks
  • Deptrac kihtide piiride valideerimiseks
  • SonarQube (ise hostitud) kohapealsete kvaliteediväravate jaoks

Polüglottide ettevõtte pakk (TypeScript koos pärandsüsteemidega):

  • Kõik ülaltoodud, lisaks:
  • SMART TS XL keelteülese mõju analüüsi ja sõltuvuste kaardistamise jaoks