用另一个包中的类型键入一个无类型的包

时间:2019-02-22 19:22:33

标签: typescript-typings

是否可以重新导出现有的类型化模块并将其类型用于未类型化模块?

我要导入的库react-final-form-html5-validation只是类型react-final-form周围的一个小包装。

对此有任何选择吗?

我已经尝试了很多事情.......,但这看起来最有希望,但是react-final-form没有声明名称空间,因此我不能像使用{{ 1}}。

React

project/index.d.ts

/// <reference types="react-final-form" /> //// <reference types="./node_modules/react-final-form/dist/index.d.ts" /> //// <reference path="./node_modules/react-final-form/dist/index.d.ts" /> //// <amd-dependency path="./node_modules/react-final-form/dist/index.d.ts" /> // importing resolves the types, but also turns it into a module, which in turn breaks it // import * as RFF from react-final-form; // import { FieldProps } from react-final-form; // export * from react-final-form; declare module 'react-final-form-html5-validation' { var Field: React.ComponentType<FieldProps> }

project/src/index.tsx

1 个答案:

答案 0 :(得分:0)

我也遇到了同样的问题,而且我对打字稿的经验不是很丰富,所以我不确定这是否是正确处理此问题的正确方法,但是我认为我有一个可行的解决方案

我实现了这些类型以匹配react-final-form-html5-validation文件中提供的流中的类型,这些文件基本上是FieldProps,但还有一些额外的道具可以解决错误消息。我只测试了一点,但是似乎在工作中。正如我所说,我对打字稿还很陌生,并且只有基本的了解。

declare module 'react-final-form-html5-validation' {
    import { ComponentType } from 'react';
    import { FieldProps } from 'react-final-form';
    type Messages = {
        badInput?: string;
        patternMismatch?: string;
        rangeOverflow?: string;
        rangeUnderflow?: string;
        stepMismatch?: string;
        tooLong?: string;
        tooShort?: string;
        typeMismatch?: string;
        valueMissing?: string;
    };
    export type Html5ValidationFieldProps = FieldProps<any> & Messages;
    export const Field: ComponentType<Html5ValidationFieldProps>;
}

<FieldProps<any>部分来自主要的react-final-form,这似乎也是从那里导出Field元素的方式。