如何在Visual Studio代码项目中使用自定义.d.ts文件?

时间:2018-01-26 15:53:53

标签: reactjs typescript typescript-typings

我有一个应用程序,它消耗了很多我在单独的 MyInterfaces.d.ts 文件中定义的自定义对象和数组。这个文件看起来像这样:

export type IGenericObj = {
  [key: string]: any;
}

export interface IReactJsonObj {
  component: string;
  key: number;
  props: {
    className?: string;
    id: number;
    to?: string;
    query?: string;
    src?: string;
    alt?: string;
    height?: number;
    children?: IReactJsonObj[];
  };
}

export interface IReactSideProps {
  amount: number;
  height: number;
  name: string;
  width: number;
}

现在,在我的每个文件中,我想要使用这些定义,我必须将它放在我的文件的顶部:

import { IGenericObj, IReactJsonObj, IReactSideProps } from '../../../../../../types/MyInterfaces';

必须有更好的方法吗?我希望这些定义可以在我的项目中随处可用,因为我一直在使用它们,所以厌倦了把它放在我的tsconfig.json文件中:

"typeRoots": [
  "../../../../../../types/MyInterfaces",
  "./node_modules/@types"
]

但是现在我仍然陷入困境,我应该如何在我的某个文件中使用 IGenericObj ?如果我开始输入IGene ...它没有在智能系统中显示任何内容,我也无法使用它,因为它未定义,就像我可以承诺一样示例

1 个答案:

答案 0 :(得分:0)

typeRoots应该引用目录,而不是文件。尝试"../../../../../../types",并确保路径是相对于项目根目录而不是您尝试使用这些类型的文件。

此外,如果您希望全局而非通过导入使用这些类型,则应使用declare而不是export。我个人认为这对我来说有点太全局变量,但它可能适合你的用例。

编辑: Apparently declare interface/declare type is just a synonym for interface/type in a .d.ts file, so removing the export keywords ought to have the same effect.