打字稿定义文件和扩展外部类型

时间:2017-04-01 17:20:56

标签: typescript

我正在尝试从外部类型扩展我自己的一种类型。

因为我真的不知道我在做什么,所以我将它们放在global.d.ts文件中。

在执行此操作之前,我一直在将类型导入到项目中的每个打字稿文件中,这似乎是错误和杂乱的(每个文件顶部有30个导入行)。

global.d.ts文件在我只有我的代码时可以使用

// successfully can use this anywhere
interface IPerson {
   name: string
}

如果我的类型需要扩展一个外部的类型,我的理解就会停止。

(例如,我将尝试扩展Redux操作类型)。

/// <reference path="../node_modules/redux/index.d.ts" />

interface IPerson {
  name: string
}

// even with the reference typescript 'cannot find name Action'
interface PersonAction extends Action {
   person?: IPerson
}

如果我将文件更改为

,我可以成功获取打字稿以停止抱怨无法找到“名称操作”
import * as Redux from 'redux';

interface IPerson {
  name: string
}

interface PersonAction extends Redux.Action {
  person?: IPerson
}

现在除了使用IPerson的每个文件都无法再找到它。我不明白为什么。每当我向声明文件添加导入时,它都会破坏其他所有内容,但会修复声明文件。

我在这里做错了什么?我正在寻找一个可以放置所有类型的地方,如果有更好的方法来获取打字稿以识别我的类型我会接受其他选项。

1 个答案:

答案 0 :(得分:0)

我认为您需要export模块中的界面:

import * as Redux from 'redux';

export interface IPerson {
  name: string
}

export interface PersonAction extends Redux.Action {
  person?: IPerson
}

然后import在使用地点相同:

import {IPerson, PersonAction} from 'your-module'

P.S。虽然这不是问题,但您可能需要loose the 'I' from the name of interfaces