angular - Hvorfor lager typings-verktøyet bevisst dupliserte sett med typings?


Mens jeg leste Angular 2 Quickstart, kom jeg over denne seksjonen under TypeScript-konfigurasjon:

Skrivefil-konflikter

TypeScript-kompilatoren tolererer ikke redefinering av en type. For eksempel kaster den en feil hvis den får to definisjoner for Promise-typen.

Dobbelte definisjoner er vanlige. Faktisk lager typings-verktøyet bevisst dupliserte sett med typings (av grunner som best forklares andre steder). Se i prosjektstrukturen etter typings-mappen hvor vi bør finne noe som dette:

typings
  browser
    ambient
      es6-shim
        es6-shim.d.ts
  main
    ambient
      es6-shim
        es6-shim.d.ts
  browser.d.ts
  main.d.ts

ES6-shim-typene er dupliserte, og browser.d.ts og main.d.ts har overlappende innhold.

Hvis jeg leser typings readme, står det:

Hvis du bygger en front-end-pakke, anbefales det at du bruker typings/browser.d.ts. Browser-typene blir kompilert ved å følge overstyringene i browser-feltet.

Spørsmål:

Hvorfor lager typings-verktøyet bevisst dupliserte sett med typings?

Hvorfor anbefales det at du bruker typings/browser.d.ts for front-end-pakker?

Mitt gjetning er fordi støtte for browser-feltet kan skape forskjellige typer?

Hvis ja, hva er browser-feltet, og på hvilken måte endrer det typene?

Svar #1

Gjetningen din var riktig. Typings erkjenner at pakker kan fungere forskjellig i nettleseren og andre steder. Denne funksjonen er unødvendig for de fleste vanlige pakker fordi isomorfisk JS er populært og mange pakker fungerer identisk i alle JS-miljøer.

Hvis derimot koden min med vilje sjekket miljøet for funksjonalitet, eller hvis jeg ønsket å forhindre at brukere brukte funksjoner som er ødelagte i nettleseren, ville det være nyttig å ha.

Her er et eksempel. Jeg har en pakke for fargevelger. Denne pakken, hvis jeg er på en stasjonær datamaskin, lar meg velge en farge fra hvor som helst på skjermen min. Åpenbart er dette avhengig av systemnivå-APIer, og kan ikke brukes av nettleseren. På den annen side kan nettleseren min velge fargen innenfor nettleservinduet. I stedet for å utgi en helt ny pakke, eksponerer jeg forskjellige typing for en programmerer slik at de vet hvilken funksjonalitet som er tillatt basert på deres miljø.

Til syvende og sist er det liten kostnad for deg (bortsett fra filplass på maskinen din) og potensielt funksjonalitet som ellers ville vært umulig.

Relaterte artikler