在已发布的JavaScript组件中将道具类型导出为TypeScript类型

在已发布的JavaScript组件中将道具类型导出为TypeScript类型,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,我有一个用JavaScript编写并发布到npm存储库的React组件。此组件使用prop-types库执行运行时类型检查 此组件的一些使用者使用TypeScript,并希望为组件及其道具提供类型定义。我愿意在我的项目中添加一个带有类型声明的index.d.ts文件,但是由于组件已经使用prop-types为道具声明了可接受的类型,因此我希望重复使用这些类型,而不必在两个不同的源文件中维护类型 我知道@types/prop types添加了一个实用程序类型InferProps,它可以将propT

我有一个用JavaScript编写并发布到npm存储库的React组件。此组件使用
prop-types
库执行运行时类型检查

此组件的一些使用者使用TypeScript,并希望为组件及其道具提供类型定义。我愿意在我的项目中添加一个带有类型声明的
index.d.ts
文件,但是由于组件已经使用
prop-types
为道具声明了可接受的类型,因此我希望重复使用这些类型,而不必在两个不同的源文件中维护类型

我知道
@types/prop types
添加了一个实用程序类型
InferProps
,它可以将propTypes对象转换为可用的TypeScript类型。但是当我试图在
index.d.ts
文件中使用它时,导入的propTypes对象被键入为
any

src/MyComponent.js
从“React”导入React;
从“道具类型”导入道具类型;
常量MyComponent({color,quantity})=>颜色为{color},数量:{quantity}

; MyComponent.propTypes={ 颜色:PropTypes.string, 数量:PropTypes.number }; 导出默认MyComponent;
@类型/索引d.ts
从“React”导入React;
从“道具类型”导入道具类型;
从“../src”导入MyComponent;
声明常量MyComponentType:React.FC<
PropTypes.InferProps<
MyComponent.propTypes的类型
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^`
>
>;
导出默认MyComponentType;

是否可以在TypeScript声明文件中导入JavaScript代码?我遗漏了什么?

值得一提的是,除了在纯打字机领域,一切似乎都和你一样正常:是的,这也是我观察到的。只是(我认为)在声明文件中使用时不会。看起来如果我将非TS源文件复制到某个位置,并将扩展名更改为
.TS
,则导入不再是
任何
,并且
推断属性
工作正常,但是当然,
tsc
可以看到它并抛出大量错误,因为它实际上不是有效的TS。
import React from 'react';
import PropTypes from 'prop-types';
import MyComponent from '../src';


declare const MyComponentType: React.FC<
  PropTypes.InferProps<
    typeof MyComponent.propTypes
//  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this always seems to resolve to `any`
  >
>;

export default MyComponentType;