knockout.js - KnockoutJS med TypeScript og ES2015 i nettleseren


Jeg bygger et nettsted ved å bruke TypeScript. Jeg bruker ES2015-modullaste-syntaks og sikter mot nye nettlesere. Jeg bruker KnockoutJS.

Jeg flytter også kode over fra et gammelt sideprosjekt, så mine .ts-filer eksisterer med en haug med KO view-modeller.

Å åpne en .ts-fil med referanser til ko.observable ser ut til å være greit, da TypeScript Intellisense i VS 2019 på en eller annen måte gjenkjenner Knockout-typene.

Men det hjelper ikke når det er kompilert og lastet inn i nettleseren, siden jeg trenger å laste Knockout på en eller annen måte.

Så jeg skrev rett og slett inn denne importen.

// MyViewModels.ts
import * as ko from "lib/knockout/build/output/knockout-latest.js"

Men jeg får en kompilatorfeil.

TS7016  (TS) Could not find a declaration file for module 'lib/knockout/build/output/knockout-latest.js'. '(full-path)' implicitly has an 'any' type.

Jeg skal åpenbart ikke gjøre det på denne måten. Skal jeg bare legge til en «gammeldags» <script>-tagg på siden min som peker på knockout-latest.js og laste den uten å bruke moduler, vil dette opprette et ko-objekt slik at referansene mine til ko.observable fungerer?

Takk

Merknad

Alle import-setninger må bruke en sti til en .js-fil. Dette er fordi TypeScript-kompilatoren ikke endrer importene slik at de havner i den bygde JS-en. Derfor må Chrome være fornøyd med disse importene, og det må også TypeScript være.

For å oppnå det målet har jeg allerede måttet legge til et finne- og erstatte-trinn i Gulp for å endre from "lib/path.js" til from "../lib/path.js".

Se TypeScript-løsning av relativ JS-filimport vs. Chrome-løsning av import

Svar #1

Bare legg til følgende på siden din (eller layout-siden).

<script src="~/lib/knockout/build/output/knockout-latest.js"></script>