2016-08-23 14 views
5

Tôi có một mô-đun NPM gọi RiveScript thường (trong Javascript) được khởi tạo theo cách đó:Viết một tập tin tuyên bố cho một module xuất khẩu mặc định

var RiveScript = require('rivescript'); 
var rivescript = new RiveScript(); 

Tôi đang cố gắng để viết một tập tin khai cho các mô-đun, nhưng bị kẹt ở bước đầu tiên. Dưới đây là những gì tôi đã viết cho đến nay:

declare module "rivescript" { 

    interface RivescriptOptions { 
     utf8?: boolean; 
    } 

    class RiveScript { 
     constructor(options?: RivescriptOptions); 
    } 

    export default RiveScript; 
} 

Sau đó, tôi đoán trong nguyên cảo tôi sẽ sử dụng các module theo cách này (mặc định nhập khẩu):

import RiveScript from 'rivescript'; 
let rivescript = new RiveScript(); 

Tuy nhiên, tsc tạo này, mà không hợp lệ vì hàm này tham chiếu đến hàm default():

const rivescript_1 = require('rivescript'); 
let rivescript = new rivescript_1.default(); 

Tôi đang làm gì sai?

Trả lời

8

Bạn thực sự thân thiết. Thay vì sử dụng export default, bạn nên sử dụng export =.

tùy chỉnh typings/rivescript.d.ts

declare module 'rivescript' { 
    class RiveScript { 
    constructor() 
    } 
    export = RiveScript 
} 

app.js

import RiveScript = require('rivescript'); 
let rivescript = new RiveScript(); 

Để biết thêm về làm thế nào để ghi tập tin khai báo, bạn nên có một cái nhìn tại số Typescript Handbook. Ví dụ. họ có template for 'exporting modules as a class'.

+1

Nó hoạt động, cảm ơn! Tôi chỉ bối rối bởi thực tế là cú pháp 'import RiveScript = require ('rivescript');' cú pháp không giống như một câu lệnh import ES6 hợp lệ? –

+0

Theo như tôi hiểu, 'nhập Rivescript từ 'rivescript'' sẽ nhập xuất mặc định của Rivescript. Tuy nhiên, không có xuất mặc định: https://github.com/aichaos/rivescript-js/blob/master/src/rivescript.coffee#L963. Để có cái nhìn tổng quan đầy đủ: https://github.com/Microsoft/TypeScript/issues/2242 –

+0

Ok hiểu rồi, cảm ơn! –

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