打字稿:如何从javascript文件导入一个类?

ahe*_*rve 8 javascript typescript typescript-typings typescript2.0

我想要 :

  • 导入定义类的js文件: ./myClass/index.js
  • 声明MyClass某处的公共方法(在index.ts或指定的声明文件中,我真的不知道怎么做)
  • 有一个暴露类的打字稿文件: index.ts

就像是

// index.ts
import MyClass from './myClass' // or require, or anything that would work
export {MyClass}
Run Code Online (Sandbox Code Playgroud)

// myClass/index.js
export default class MyClass {
  ...
}
Run Code Online (Sandbox Code Playgroud)

这显然不起作用,因为导入./myClass/index将找不到模块.

问题是,我试图./myClass/index.d.ts基于这个例子创建一个文件,但无论如何,我仍然有一个错误:在运行时找不到模块'./myClass/index.js'错误:(

我觉得我在这里错过了一些打字稿基础,但我正在努力寻找一些明确的资源.

有任何想法吗 ?

goe*_*ing 11

export default classJavaScript中没有.你能做的就是像这样写你的JS文件.myClass/index.js

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

}
exports.default = MyClass;
Run Code Online (Sandbox Code Playgroud)

为它创建一个类型定义. myClass/index.d.ts

export default class MyClass {
  hello(name: string): void;
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以像这样将它导入TypeScript.

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

const my = new MyClass();
my.hello("Stack Overflow");
Run Code Online (Sandbox Code Playgroud)


小智 5

在你的 javascript 文件的末尾,写下这个

exports.MyClass = MyClass;
Run Code Online (Sandbox Code Playgroud)

在 ts 文件中

import * as  IzendaSynergy  from './izenda/izenda_ui.js';
Run Code Online (Sandbox Code Playgroud)

或者

import { IzendaSynergy } from './izenda/izenda_ui.js';
Run Code Online (Sandbox Code Playgroud)

在 tsconfig.json 文件中

  "allowJs": true
Run Code Online (Sandbox Code Playgroud)

  • `allowJs` 对我来说很关键。谢谢! (3认同)