12

使用 Typescript,有没有办法只从外部模块导入类型?

基本上我只希望一个模块知道另一个模块的类型(以支持 Intellisense),但不会在 JavaScript 中发出导入。我想这样做是因为有问题的模块可能已经加载,也可能没有加载 - 即没有硬依赖,但我希望有一些类型的代码可以运行并使用该模块(如果存在)。

希望这很清楚。

4

2 回答 2

9

您可以将定义文件与参考注释一起使用,这使得类型可用而无需添加任何导入语句(例如requireor define)。

///<reference path="module.d.ts" />

您可以在编译期间自动生成定义文件,尽管出于您的目的,您可能想要手动启动自定义文件(取决于您希望如何使用它 - 预计会导入自动文件)。

示例代码

模块A.ts

class ExampleOne {
    doSomething() {
        return 5;
    }
}

export = ExampleOne;

模块B.ts

class ExampleTwo {
    doSomething() {
        return 'str';
    }
}

export = ExampleTwo;

有可能的使用:

import B = require('moduleb');

var a = new ExampleOne();
var b = new B();

要完成这项工作,您将创建ModuleA.d.ts

模块A.d.ts

declare class ExampleOne {
    doSomething(): number;
}

然后像这样引用它:

/// <reference path="modulea.d.ts" />

import B = require('moduleb');

var a = new ExampleOne();
var b = new B();
于 2015-02-08T17:58:24.420 回答
1

我不知道它是否回答了您的问题,但您可以添加一个类型定义文件:

/** mytype.d.ts */
interface MyType {
  prop1: number,
  prop2: string
}

export default MyType

并将其导入到您的两个模块中,如下所示:

/** module1.ts */
import MyType from './mytype.d'

//use
let myVar: MyType
于 2020-06-11T14:42:57.010 回答