reactjs - hvordan kompilere typescript med react-definisjoner
Jeg prøver å skrive en Typescript-modul som bruker React.addons.update. Imidlertid kunne jeg ikke finne en måte å få den til å kompilere på.
Jeg har en mappe med følgende filer:
- https://github.com/borisyankov/DefinitelyTyped/blob/master/react/react.d.ts
test.ts som inneholder:
/// <reference path="react.d.ts"/> React.addons.update({}, {test : {$set : "foo" }});
Jeg kjører følgende kommandoer:
node <pathtotsc>\tsc -v
=> message TS6029: Version 1.3.0.0
node <pathtotsc>\tsc react.d.ts test.ts
=> test.ts(2,1): error TS2304: Cannot find name 'React'.
Hva mangler jeg? Hvordan referere riktig til React-definisjonen?
rediger
node <pathtotsc>\tsc test.ts
test.ts(2,1): error TS2304: Cannot find name 'React'.
Svar #1
Den relevante informasjonen kan finnes her. Trikset er å «snu» forklaringen for å forstå hvordan en definisjonsfil er ment å bli brukt.
I dette tilfellet bør react.d.ts brukes slik:
/// <reference path="react.d.ts"/>
import React = require("react/addons");
React.addons.update({}, {$set : "foo" });
Dessverre krever dette modulkompileringsflagget for tsc, som jeg ikke vil bruke (jeg vil kun ha statisk kompilering). Løsningen er enten å bruke moduler, eller legge til en linje på slutten av definisjonsfilen:
declare var React : AddonsExports
Dette fungerer, men dessverre er grensesnittdeklarasjonen for update feil, så jeg kan ikke bruke den selv med denne modifikasjonen.
Svar #2
Per 14. januar 2016, med React 0.14.3 og Typescript 1.6.2, gjorde følgende d.ts-import endelig at Typescript anerkjente React og ReactDom i ts-filer.
tsd install react-global --save tsd update --save --overwrite
Jeg må ha brukt en gammel veiledning opprinnelig. Den sa at jeg bare trengte react.d.ts-filen. Men siden da ser det ut til at nyere versjoner av React krever flere definisjonsfiler.
Å installere react-global la til alle disse filene i min tsd.d.ts:
/// <referanse sti="react/react-dom.d.ts" /> /// <referanse sti="react/react-addons-create-fragment.d.ts" /> /// <referanse sti="react/react-addons-css-transition-group.d.ts" /> /// <referanse sti="react/react-addons-linked-state-mixin.d.ts" /> /// <referanse sti="react/react-addons-perf.d.ts" /> /// <referanse sti="react/react-addons-pure-render-mixin.d.ts" /> /// <referanse sti="react/react-addons-test-utils.d.ts" /> /// <referanse sti="react/react-addons-transition-group.d.ts" /> /// <referanse sti="react/react-addons-update.d.ts" /> /// <referanse sti="react/react-global.d.ts" />
