模块扩充/在非类型文件上定义类型

Posted

技术标签:

【中文标题】模块扩充/在非类型文件上定义类型【英文标题】:Module augmentation / Defining types over non-typed files 【发布时间】:2019-02-28 02:27:28 【问题描述】:

我需要为我当前的项目定义以下类型:

import toISOMonthString from 'react-dates/esm/utils/toISOMonthString';

问题是,我尝试了基本的:

declare module "react-dates/esm/utils/toISOMonthString'" 

但我有错误:

[ts] Invalid module name in augmentation. Module 'react-dates/esm/utils/toISOMonthString' resolves to an untyped module at '.../node_modules/react-dates/esm/utils/toISOMonthString.js', which cannot be augmented.

为了解决这个问题进行 PR 应该很容易,但我现在需要在本地解决它。

你知道如何输入这些无类型文件吗?

【问题讨论】:

【参考方案1】:

您的declare module "react-dates/esm/utils/toISOMonthString'" 被视为模块扩充,因为它出现在另一个模块(具有*** ES6 导入或导出的文件)中。将声明移动到单独的文件中,以便将其视为模块的原始声明。 (这没有很好的记录;您可以阅读更多关于它的信息here。)

【讨论】:

我实际上找到了一个我可以分享的解决方案。首先我将声明移到另一个文件.d.ts 然后检查***.com/questions/42388217/… 我可以在另一个人的帮助下解决这个问题【参考方案2】:

一种可能的方法应该是使用以下内容创建一个.d.ts 文件:

declare module 'react-dates/esm/utils/toISOMonthString' 
  import  MomentInput  from 'moment';

  export default function(date: MomentInput): string;

【讨论】:

以上是关于模块扩充/在非类型文件上定义类型的主要内容,如果未能解决你的问题,请参考以下文章

MIME类型是啥意思啊

Typescript自定义类型定义在导入类上中断

response的contentType的类型值Response.ContentType

MIME类型(JSP中)

如何在 TypeScript 定义文件中使用外部模块的类型?

帮助 System.Web.Compilation.BuildManager 在非引用程序集中查找类型