typescript - 如何在用 TypeScript (TSX) 编写的 React 应用程序中使用 Facebook Relay?

标签 typescript reactjs relayjs tsd

我想在 React 中编写一个新的 Web 应用程序使用 RelayGraphQL 沟通服务器。最近JSX supportTypeScript 引入.但是 DefinitelyTyped 上的中继没有类型声明文件 (.d.ts) .如何使用 TypeScript 编写我的应用程序而无需先为 Relay 编写类型文件?

最佳答案

Typescript 不要求您对所使用的所有库进行打字,强烈建议您使用它。无需输入即可使用 Relay:

import * as React from "react"
let Relay = require("react-relay")

interface HelloProps extends React.Props<HelloComponent> {
  viewer: {
    message: string
  }
}

class HelloComponent extends React.Component<HelloProps,void> {
  render() {
    return <div>Hello { this.props.viewer.message }</div>
  }
}

let Hello = Relay.createContainer(HelloComponent, {
  fragments: {
    viewer: () => Relay.QL`fragment on Viewer { message }`
  }
})

然后将 Hello 用作常规 Relay 组件。这个想法是 require 是一个接受字符串并返回 any 的函数,因此您可以像在 vanilla Javascript 中那样使用 Relay 变量。

如果您不使用 Node.JS 类型,您可能需要为 require 添加类型。在你的 d.ts 文件的某处,添加:

interface NodeRequireFunction {
  (id: string): any;
}

declare var require: NodeRequireFunction;

关于typescript - 如何在用 TypeScript (TSX) 编写的 React 应用程序中使用 Facebook Relay?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34140567/

相关文章:

javascript - 如何在 TypeScript 中继承现有的 AND js 类编译成 AMD 模块?

angular - 错误: Cannot match any routes in Angular 5

javascript - react .js : Why is there no componentDidRender event?

javascript - GraphQL/中继架构 "Cannot query field..."

angular - 以 Angular 单击某个按钮后显示文本框

javascript - 将最终的 Typsecript 导出包装在模块中?

javascript - 在Redux中更新reducer中的嵌套数组

javascript - react 状态组件 - 无法读取未定义的属性 'state'

node.js - Edge.node 字段类型必须是 Output Type 但得到 : undefined

javascript - 如何从 GraphQLSchema javascript 对象获取 .graphql 文件?