typescript - Vad betyder det när import följs av en require?


Raven-dokumentationen för Angular 2 nämner följande ES6-kodexempel:

import Raven = require('raven-js');  // NOTE: "require" not "from"

De nämnde uttryckligen require, men jag är inte säker på vad detta uttalande faktiskt gör och var det är dokumenterat.

Svar #1

import Raven = require('raven-js'); 

är den ursprungliga Typescript-importsyntaxen.

Den nya ES6-stilen för import föredras nu (sedan TS 1.5)

import * as Raven from 'raven-js'

Dessa två syntaxer importerar ett externt bibliotek/modul för vilket typdefinitioner måste finnas tillgängliga, antingen som separata definitionsfiler som refereras i tsconfig.json eller som en del av biblioteket med en referens till dem i typings-posten i dess package.json (syntaxen ///<reference bör undvikas).

Observera att i en 'require'-miljö, såsom commonjs,

const Raven = require('raven-js'); 

kommer att göra Raven tillgänglig för resten av koden som any (d.v.s. definitionerna kommer inte att importeras). Detta kan vara användbart när man försöker använda ett JS-bibliotek för vilket man inte har (eller vill skapa) definitionerna.

Svar #2

Importeringen med require kommer från TypeScripts eget modulsystem. Du kan läsa om det i detalj här.

Det nämner också hur man använder olika typer av modulesyntaxer (CommonJS, Native ES6 Modules, etc)