2016-11-07 17 views
6

Tôi muốn:Loại bản ghi: cách nhập một lớp từ tệp javascript?

  • Nhập một file js đó định nghĩa một lớp: ./myClass/index.js
  • Khai báo các phương thức public của MyClass ở đâu đó (trong index.ts hoặc một tập tin khai quy định, tôi thực sự không biết làm thế nào để làm điều đó)
  • có một tập tin typescript đó cho thấy nhiều lớp: index.ts

cái gì đó như

// index.ts 
import MyClass from './myClass' // or require, or anything that would work 
export {MyClass} 

// myClass/index.js 
export default class MyClass { 
    ... 
} 

Điều này rõ ràng không hoạt động, như việc nhập khẩu ./myClass/index sẽ không tìm thấy các mô-đun.

Có điều là, tôi đã cố gắng để tạo ra một tập tin ./myClass/index.d.ts dựa trên this example, nhưng không có vấn đề gì, tôi vẫn có một Lỗi : Không thể tìm thấy lỗi mô-đun' ./myClass/index.js' trong thời gian chạy :(

tôi cảm thấy như tôi bỏ lỡ một số vấn đề cơ bản nguyên cảo ở đây nhưng tôi phấn đấu để tìm một số tài nguyên rõ ràng.

Bất kỳ ý tưởng?

Trả lời

6

không có export default class trong JavaScript. những gì bạn có thể làm là ghi file JS của bạn như thế này: myClass/index.js

"use strict"; 
class MyClass { 
    hello(name) { 
    console.log(`Hello ${name}`); 
    } 

} 
exports.default = MyClass; 

Tạo định nghĩa kiểu cho nó. myClass/index.d.ts

export default class MyClass { 
    hello(name: string): void; 
} 

Sau đó, bạn có thể nhập nó vào TypeScript của bạn như thế này.

/// <reference path="./myClass/index.d.ts" /> 
import MyClass from "./myClass"; 

const my = new MyClass(); 
my.hello("Stack Overflow"); 
+0

Không thể tin rằng đó là 0_o đơn giản. Cảm ơn rất nhiều ! – aherve

1

vào cuối của file javascript của bạn, viết này

exports.MyClass = MyClass; 

trong file ts

import * as IzendaSynergy from './izenda/izenda_ui.js'; 

hoặc

import { IzendaSynergy } from './izenda/izenda_ui.js'; 

trong tập tin tsconfig.json

"allowJs": true 
Các vấn đề liên quan