- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
对于我正在导入的一些模块,我最终修改了它们的声明文件以使其正常工作。我不确定我是不是做错了,或者这些模块的类型是否恰好有问题。
index.tsx
import * as React from "react";
import * as moment from "moment";
import BigCalendar from "react-big-calendar";
import ReactModal from "react-modal";
react
和 moment
导入正常。问题在于 react-big-calendar
和 react-modal
。这基本上是我为 react-modal
经历的过程:
我安装了@types/react-modal
。
node_modules/@types/react-modal/index.d.ts(缩写)
// Type definitions for react-modal 1.6
// Project: https://github.com/reactjs/react-modal
// Definitions by: Rajab Shakirov <https://github.com/radziksh>, Drew Noakes <https://github.com/drewnoakes>, Thomas B Homburg <https://github.com/homburg>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.3
import * as React from "react";
export as namespace ReactModal;
export = ReactModal;
declare namespace ReactModal {
interface Props {
...
}
}
declare class ReactModal extends React.Component<ReactModal.Props> {
...
}
我尝试了 import ReactModal from "react-modal"
这给了我 Module '...' has no default export
。
我试过从“react-modal”导入{ReactModal}
这给了我 Module '...' has no exported member 'ReactModal'
。
我尝试了 import * asReactModal from "react-modal"
编译,但给了我 Warning: React.createElement: type is invalid -- expected a string (for built-in components ) 或一个类/函数(对于复合组件)但在运行时得到:对象
。
最后我只是将声明文件更改为:
import * as React from "react";
export as namespace ReactModal;
declare namespace ReactModal {
interface Props {
...
}
}
export default class ReactModal extends React.Component<ReactModal.Props> {
...
}
然后我可以使用 import ReactModal from "react-modal"
,它成功了。
使用 react-big-calendar
我刚刚卸载了 @types/react-big-calendar
,现在有了我自己的类型。当然,其他人正在为这些包使用这些声明文件而没有这些麻烦。任何指导将不胜感激。
package.json
{
"dependencies": {
"@types/react": "^15.0.27",
"@types/react-dom": "^15.5.0",
"@types/react-modal": "^1.6.7",
"moment": "^2.18.1",
"react": "^15.5.4",
"react-big-calendar": "^0.14.0",
"react-dom": "^15.5.4",
"react-modal": "^2.1.0"
},
"devDependencies": {
"awesome-typescript-loader": "^3.1.3",
"babel-core": "^6.24.1",
"babel-loader": "^7.0.0",
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1",
"css-loader": "^0.28.4",
"source-map-loader": "^0.2.1",
"style-loader": "^0.18.2",
"typescript": "^2.3.4",
"webpack": "^2.5.0"
}
}
tsconfig.json
{
"compilerOptions": {
"outDir": "./Scripts/dist/",
"sourceMap": true,
"noImplicitAny": true,
"target": "es5",
"jsx": "react"
},
"include": [
"./Scripts/src/**/*"
],
"exclude": [
"node_modules"
]
}
最佳答案
我认为react-modal/index.d.ts有一个错误,你(或我)应该提交一个拉取请求。如果我解释他们的 react-modal-tests.tsx正确地,他们使用 import * as ReactModal from 'react-modal';
导入它,编译但不运行。我的印象是他们的测试只能编译。
我想出了如何在不修改 node_packages/@types 中的文件的情况下让它工作。
将这些行添加到 tsconfig 文件的 compilerOptions
部分:
“baseUrl”:“源代码/类型”,
“typeRoots”:[“./src/types”,“./node_modules/@types”]
然后将你修改后的react-modal/index.d.ts
放入src/types/react-modal/index.d.ts
。然后 typescript 编译器应该在那里找到它。我只是将 node_modules/@types/react-modal
的内容复制到 src/types/react-modal
并进行了更改。
关于TypeScript - 从 DefinitelyTyped 导入一些使用声明文件(类型)的 npm 包时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44803754/
我找不到任何关于如何管理包的信息。我希望使用 createJS,但最近一次提交是在一年前。所以它可能不是当前的 JS 版本。 我是 typescript 的新手。如果所有这些优秀的 UI 库都没有随着
我看到“DefinitelyTyped”是与 TypeScript/JavaScript 开发相关的东西,但我无法理解它的用途或一些代码示例来理解它。 我看过 http://definitelytyp
我正在尝试为 geocomplete jQuery 插件编写 .d.ts 文件。我是 TypeScript 的新手。我在我的 .d.ts 文件中添加了这些: /// interface GeoOpt
我需要在 TSD 存储库中安装整个目录,而不仅仅是一个目录。 例如,运行 tsd install cordova 只会下载 cordova 目录中的 cordova.d.ts 文件。我还需要 cord
我很难在我的项目中使用以下类型文件: https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/log4javascript 显然,
我正在尝试使用 async的 filter函数,它来自 v1.5.2 的文档(如果您 npm i async,则默认获得该函数)在迭代器中为回调采用单个( bool )值: iterator(item
我正在尝试获取 graphql 的类型定义。我已经安装了 graphql 和 @types/graphql 并且在我的文件中我有 import * as graphql from "graphql"。
当 DefinitelyTyped 具有外部依赖性时,我无法弄清楚如何将它添加到 DefinitelyTyped 中。我无法让测试通过,因为除非我将 package.json 添加到文件夹,否则无法找
我想从 lodash 导入单个函数,同时保留类型。比如这样: import invokeMap from 'lodash/invokeMap'; 但是我好像做不到。编译器说没有模块 lodash/in
我正在使用 angularjs 和 typescript 创建一个应用程序。我正在使用 cookie 来存储有关用户登录和权限等的相同数据。我遇到了 angular-cookies.d.ts 文件的问
有人能清楚地说明 DefinitelyTyped 和 typings 之间的区别吗?两者都为现有的 JS 库提供 TS 定义,但我不确定它们之间的区别。 最佳答案 正如 Mike 所说,typings
根据 https://blogs.msdn.microsoft.com/typescript/2016/06/15/the-future-of-declaration-files/ : Definit
在最近更改 https://github.com/DefinitelyTyped/DefinitelyTyped/pull/32567 之后,一些用户在引用使用 TypeScript 构建的库时可能会
新版本的 UI Grid (RC3) 似乎对 nggrid 进行了相当多的架构更改,并且 nggrid 的 definitelytyped 文件给我带来了问题,因为它们是不同的版本。 新版uigrid
我正在尝试将 Angular Material 与 ng-metadata 项目一起使用,但遇到了一些问题。 我使用 DefinitelyTyped 作为 Angular Material ,第一行是
DefinitelyTyped提供了一个下划线声明文件,定义了一个List接口(interface),并在代码中大量使用了它。 // Common interface between Arrays a
我正在使用一个名为 foo 的 npm 包,它在 DefinitelyTyped 上不存在。换句话说,@types/foo 不存在(或者可能已过时!) 我希望仍然能够在更严格的设置下使用它,例如 no
我正在寻求有关 TypeScript 和 PouchDB type declarations 的帮助。考虑这个 TS 代码: import PouchDB = require('pouchdb') i
我正在寻求有关 TypeScript 和 PouchDB type declarations 的帮助。考虑这个 TS 代码: import PouchDB = require('pouchdb') i
我正在尝试在我的 Angular 5 应用程序中使用 SignalR。 我从 DefinitelyTyped 安装了这些强类型: npm install --save @types/jquery np
我是一名优秀的程序员,十分优秀!