如何使用CRA将类型声明添加到react-typescript项目

时间:2019-03-18 22:29:25

标签: reactjs typescript create-react-app type-declaration react-tsx

我已经用命令yarn create react-app my-app --typescript用CRA创建了一个react typescript项目

现在我安装了一个模块foo,该模块默认情况下没有任何类型的输入,也不存在于无类型存储库中。

即在组件中,我有

import {bar} from 'foo';

会引发错误Type error: Could not find a declaration file for module 'foo'. '/*/node_modules/foo/dist/entry.js' implicitly has an 'any' type.

我在项目根目录的types文件夹中创建了foo.d.ts,例如

declare module 'foo'{ import * as React from 'react' }

只是将foo设为类型any,但仍然会遇到相同的错误。似乎无论哪种编译器(webpack,其他编译器)都无法在types文件夹

中找到该声明。

如何为项目添加自定义类型声明?

2 个答案:

答案 0 :(得分:0)

这是一个真实的用例示例。 我设法将kendo-ui-core集成到CRA + Typescript中。

问题是kendo-ui-core没有键入,即键入具有不同的名称:@types/kendo-ui

Typescript抱怨没有类型定义

VS Code complaining about missing declaration

要解决此问题,请在您的 / src 目录中创建一个名为 kendo-ui-core.d.ts 的文件,其内容如下:

// src/kendo-ui-core.d.ts
declare module 'kendo-ui-core' {
  import * as KendoTypings from '@types/kendo-ui';
  export = KendoTypings;
}

答案 1 :(得分:-1)

这有效:

/* create src/CustomTypes.ts */

namespace MyCustomType {
  export type foo = number;
}

export default MyCustomType;

使用如下:

import MyCustomType from "src/CustomTypes";

const num: MyCustomType.foo = 123;