2016-02-29 39 views
29

Tôi đang sử dụng TypeScript với Express/Node.js.Nhập bằng chữ viết/như so với nhập/yêu cầu?

Đối với module tiêu thụ, Sổ tay nguyên cảo cho thấy cú pháp sau:

import express = require('express');

Nhưng cũng file typescript.d.ts cho thấy:

import * as express from "express";

Tôi cũng đã tìm kiếm blog MSDN nhưng không thể tìm thấy bất cứ điều gì.

Điều nào chính xác hơn vào đầu năm 2016? Sự khác biệt giữa hai, nếu có?

Nguồn tốt nhất để tìm thông tin về cú pháp mới nhất để sử dụng để tôi có thể tìm thông tin này trong tương lai ở đâu?

+2

Tôi không biết điều gì là tốt nhất, nhưng điều này là rất tốt https://github.com/Microsoft/TypeScript/wiki/What's-new-in-TypeScript –

Trả lời

55

Chúng hầu hết là tương đương, nhưng import * có một số hạn chế mà import ... = require thì không.

import * as tạo mã định danh là đối tượng mô-đun , nhấn mạnh vào đối tượng. Theo spec ES6, đối tượng này không bao giờ được gọi hoặc new khả năng - nó chỉ có các thuộc tính. Nếu bạn đang cố gắng để nhập khẩu một hàm hoặc lớp, bạn nên sử dụng

import express = require('express'); 

hoặc (tùy thuộc vào bộ nạp mô-đun của bạn)

import express from 'express'; 

Cố gắng sử dụng import * as express và sau đó gọi express() luôn là bất hợp pháp theo thông số ES6. Trong một số môi trường thời gian chạy + transpilation, điều này có thể xảy ra nhưng vẫn có thể xảy ra ở bất kỳ thời điểm nào trong tương lai mà không cần cảnh báo, điều này sẽ khiến bạn buồn.

+3

“Nói chung, bạn nên sử dụng cú pháp ES6 trừ khi bạn có một số lý do không để (Tôi không thể nghĩ ra bất kỳ offhand) "FWIW tôi [đưa ra một câu trả lời tại sao không] (http://stackoverflow.com/a/29598404/252087) trong [câu hỏi trùng lặp này ở đây] (http: //stackoverflow.com/questions/29596714/new-es6-syntax-for-importing-commonjs-amd-modules-ie-import-foo-require). –

+0

Tôi hơi bối rối giữa sự mâu thuẫn rõ ràng ở đây. Tôi nên làm theo lời khuyên nào? @CSnover là lời khuyên của bạn vẫn chỉ áp dụng ngay hôm nay trong năm 2016 như khi bạn đăng nó? Cảm ơn bạn. –

+1

@AdamThompson có, xem phần “Cập nhật năm 2016”. –

3
import * as express from "express"; 

Đây là cách được đề xuất để thực hiện vì đây là tiêu chuẩn cho JavaScript (ES6/2015) kể từ năm ngoái.

Trong mọi trường hợp, trong tệp tsconfig.json của bạn, bạn nên nhắm mục tiêu tùy chọn mô-đun đến tệp commonjs là định dạng được hỗ trợ bởi nodejs.

Các vấn đề liên quan