web-dev-qa-db-fra.com

Typescript import / as vs import / require?

J'utilise TypeScript avec Express/Node.js.

Pour les modules consommateurs, le manuel TypeScript montre la syntaxe suivante:

import express = require('express');

Mais aussi le fichier TypeScript.d.ts montre:

import * as express from "express";

J'ai également recherché le blog de MSDN mais n'ai rien trouvé.

Lequel est le plus correct au début de 2016? Quelles sont les différences entre les deux, le cas échéant?

Où est la meilleure source pour trouver des informations sur la dernière syntaxe à utiliser afin que je puisse retrouver ces informations à l'avenir?

65
Adam Thompson

Celles-ci sont pour la plupart équivalentes, mais import * a des restrictions que import ... = require n’a pas.

import * as crée un identifiant qui est un objet module, avec une emphase sur objet. Selon la spécification ES6, cet objet n'est jamais appelable ni newable - il n'a que des propriétés. Si vous essayez d'importer une fonction ou une classe, vous devriez utiliser

import express = require('express');

ou (selon votre chargeur de module)

import express from 'express';

Tenter d'utiliser import * as express puis invoquer express() est toujours illégal selon la spécification ES6. Dans certains environnements d'exécution + de transpilation, cela peut quand même fonctionner, mais cela peut casser à tout moment dans le futur sans avertissement, ce qui vous rendra triste.

105
Ryan Cavanaugh
import * as express from "express";

C'est la façon suggérée de le faire car c'est la norme pour JavaScript (ES6/2015) depuis l'année dernière.

Dans tous les cas, dans votre fichier tsconfig.json, vous devez cibler l'option de module sur commonjs, qui est le format pris en charge par nodejs.

11
thitemple