3

react-datetime包含一个打字稿定义文件,但它不起作用(对我来说)。从我所见,ts 定义文件导出的类型 ( ReactDatetime) 与实际javascript 文件( Datetime) 中的类型不同。

我继续并更改react-datetime.d.ts了类型文件以导出(我认为)是正确的类型(在gist中可用):

interface Datetime extends React.ComponentClass<DatetimepickerProps> {}
export { Datetime }

并且 TypeScript 抱怨它找不到Datetime

(26,10): error TS2304: Cannot find name 'Datetime'.

我想在打字和这个组件方面我必须缺少一些非常基本的东西。试图使其与原始类型文件一起工作导致无法首先导入模块,即使该react-datetime.d.ts文件是使用/// <reference path="../node_modules/react-datetime/react-datetime.d.ts" />指令引用的。

尝试使用的类的简约示例<Datetime/>

/// <reference path="../../node_modules/react-datetime/react-datetime.d.ts" />
import * as React from "react";
import { Datetime } from "react-datetime";


export interface DateTimeResolutionProps { timestamp: number, resolution: number }
export class DateTimeResolutionPicker extends React.Component<DateTimeResolutionProps, {}> {
    render() {
        // console.log(Datetime);
        return (<div>
        <Datetime/>
        </div>);
    }

}
4

2 回答 2

4

您应该像导入React模块一样导入它:

import * as Datetime from "react-datetime";

然后它不会抱怨找不到Datetime.

至于名称,您可以决定名称,ReactDatetime如果您愿意,可以是:

import * as ReactDatetime from "react-datetime";

模块也会发生同样的情况React,如果您查看定义文件,它将显示:

declare namespace __React {
    ...
}

declare module "react" {
    export = __React;
}
于 2016-09-09T19:31:47.783 回答
1

Datetime即使 React 组件需要是一个值(无论它是 SFC 还是类),您仍将其作为类型导出。所以这就是你的版本不工作的原因。

repo 上的版本目前将其定义为 CommonJS 模块,这意味着现在它应该需要与 CommonJS 兼容的语法:

import Datetime = require("react-datetime");
于 2016-09-09T17:02:07.483 回答