reactjs - 如何在 xxx.tsx 类文件中导入 xxx.d.ts 声明文件?

标签 reactjs typescript

我正在 Typescript 中编写 react 代码,我想将声明文件与主类文件分开,所以我有这样的结构:

src  
├── app  
│   ├── items.tsx  
│   └── items.d.ts

当我尝试使用在 items.d.ts 中定义的接口(interface)时,出现错误:找不到名称“IItemProps”
我无法从 items.d.ts 导入接口(interface),错误为 Module '".../src/app/items"' has no Exported member 'IItemProps'

谢谢!

这是代码:

// items.tsx
import * as React from 'react';

class Items extends React.Component<IItemsProps, IItemsState> implements IItems {

    render() {
        return (
            <div>
                <div>test</div>
            </div>
        );
    }
}

export default Items;

// items.d.ts
export interface IItems {
    valid: boolean;
}

export interface IItemsProps {
    validAtInit: boolean;
}

export interface IItemsState {
    values: {[key: string]: any};
}

最佳答案

简单的解决方案如下:

将构成模块的所有构造放在单个源文件中并删除声明文件。

详细信息:

请记住,ES 模块是一种物理模块格式,而不是逻辑模块格式,这意味着它们直接对应于 URL。但是,由于其转换过程,TypeScript 编译器并不认为扩展可以区分它们。

给定两个具有相同名称但扩展名不同的模块,编译器将选择其中之一。它具有非常特定的优先顺序。

要么将所有内容放在同一个文件中,要么以不同的名称命名。

如果这看起来很奇怪,请考虑一下如果您打开 --declaration 发出标志会发生什么。

.d.ts 文件旨在提供与已转换为 JavaScript 或表示不作为源存在的结构的源相对应的类型信息。

注意: 要验证我在这里所说的内容,请使用 --traceResolution 运行编译器。输出将准确地展示正在发生的情况。

关于reactjs - 如何在 xxx.tsx 类文件中导入 xxx.d.ts 声明文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49723606/

相关文章:

javascript - 如何删除现有的http服务器?

javascript - 未捕获的 TypeError : (0 , _jquery2.default)(...).sortable 不是函数

javascript - 从 axios 响应中 react 设置状态

javascript - 如何使用 react Hook useState 在表单上显示/隐藏一些警报

javascript - 如何正确地将 HttpClient 请求的结果多播到 Angular 中的多个组件?

typescript - 可以在 Typescript 中向 Promise 添加取消方法吗?

javascript - 如何在 React 中使用多个表单字段自动保存?

angular - 为什么 Angular 类型 "Routes"是可变的?

javascript - 在没有jquery的情况下缩小一个div

javascript - 使用数组和多维对象以 Angular 显示 API 结果