ReactJS Typescript:类型“number”不可分配给类型“0”| 8 | 16 | 16 24 | 32 | 32 40 | 40不明确的'

2024-01-02

我想重现一个来自 Material-ui 的网格 https://material-ui.com/layout/grid/使用打字稿进行反应。可以找到现场演示here https://codesandbox.io/s/0y2x2q54wl.

我已经调整了示例以使用打字稿,使我的 demo.jsx 看起来像:

import { withStyles } from '@material-ui/core/styles';
import Grid from '@material-ui/core/Grid';
import FormLabel from '@material-ui/core/FormLabel';
import FormControlLabel from '@material-ui/core/FormControlLabel';
import RadioGroup from '@material-ui/core/RadioGroup';
import Radio from '@material-ui/core/Radio';
import Paper from '@material-ui/core/Paper';
import {WithStyles} from "@material-ui/core/styles/withStyles";

const styles = (theme:any) => ({
    root: {
        flexGrow: 1,
    },
    paper: {
        height: 140,
        width: 100,
    },
    demo: {
        height: 140,
        width: 100,
    },
    control: {
        padding: theme.spacing.unit * 2,
    },
});

class App extends React.Component<WithStyles<typeof styles>> {
    state = {
        spacing: '16',
    };

    handleChange = (key:any) => (event:any, value:any) => {
        this.setState({
            [key]: value,
        });
    };

    render() {
        const { classes } = this.props;
        const { spacing } = this.state;

        return (
            <Grid container className={classes.root} spacing={16}>
                <Grid item xs={12}>
                    <Grid container className={classes.demo} justify="center" spacing={Number(spacing)}>
                        {[0, 1, 2].map(value => (
                            <Grid key={value} item>
                                <Paper className={classes.paper} />
                            </Grid>
                        ))}
                    </Grid>
                </Grid>
                <Grid item xs={12}>
                    <Paper className={classes.control}>
                        <Grid container>
                            <Grid item>
                                <FormLabel>spacing</FormLabel>
                                <RadioGroup
                                    name="spacing"
                                    aria-label="Spacing"
                                    value={spacing}
                                    onChange={this.handleChange('spacing')}
                                    row
                                >
                                    <FormControlLabel value="0" control={<Radio />} label="0" />
                                    <FormControlLabel value="8" control={<Radio />} label="8" />
                                    <FormControlLabel value="16" control={<Radio />} label="16" />
                                    <FormControlLabel value="24" control={<Radio />} label="24" />
                                    <FormControlLabel value="32" control={<Radio />} label="32" />
                                    <FormControlLabel value="40" control={<Radio />} label="40" />
                                </RadioGroup>
                            </Grid>
                        </Grid>
                    </Paper>
                </Grid>
            </Grid>
        );
    }
}

export default withStyles(styles)(App);

问题是,它会引发以下错误:

(101,79): Type 'number' is not assignable to type '0 | 8 | 16 | 24 | 32 | 40 | undefined'.

在下面一行中:

<Grid container className={classes.demo} justify="center" spacing={Number(spacing)}>

有任何想法吗?我的第一个猜测是我需要排版间距为数字类型。由于我对打字稿很陌生,所以我找不到正确的解决方案。


看起来像Grid不接受任何数字,而是一组称为GridSpacing。请参阅类型声明1 https://github.com/mui-org/material-ui/blob/5ec75c6f62c1ef5bd94c7f67a607605cb2f3be80/packages/material-ui/src/Grid/Grid.d.ts#L44 and 2 https://github.com/mui-org/material-ui/blob/5ec75c6f62c1ef5bd94c7f67a607605cb2f3be80/packages/material-ui/src/Grid/Grid.d.ts#L17。因此,在像您一样转换为数字后,您需要将该数字转换为GridSpacing:

<Grid container className={classes.demo} justify="center" spacing={Number(spacing) as GridSpacing}>

并添加到您的导入中:

import { GridSpacing } from '@material-ui/core/Grid';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ReactJS Typescript:类型“number”不可分配给类型“0”| 8 | 16 | 16 24 | 32 | 32 40 | 40不明确的' 的相关文章

  • 使用 ReactJS SPA 在 .net Core 中进行身份验证

    我尝试向 net Core 2 1 应用程序添加身份验证 从头开始 我们可以使用 VS 模板通过 React 创建新的 Web 应用程序 在这个模板中我们可以看到 app UseSpa spa gt spa Options SourcePa
  • 在 Angular 2 Typescript 应用程序中使用 moment.js

    我在 Angular 2 Typescript 应用程序中使用 moment js 库时遇到了困难 即使在阅读了答案之后这个问题 https stackoverflow com q 35166168 1031097我无法让它工作 这就是我到
  • typescript 类型最大递归限制为 9

    我终于成功创建了一个通用类型 它为我提供了 json 键列表 值的所有可能组合 我什至准备了一种限制递归的方法 type EditAction
  • React-Native 中的导航抽屉

    我是反应原生的新手 不介意我问一个基本问题 我想知道 实现抽屉式导航的分步过程是什么 推荐链接这个链接 https github com react native community react native side menu usage
  • 服务器发现和监控引擎已弃用

    我在 Node js 应用程序中使用 Mongoose 这是我的配置 mongoose connect process env MONGO URI useNewUrlParser true useUnifiedTopology true u
  • typescript 中的重载签名和实现签名

    我正在阅读 Typescript 手册 我很难理解为什么以下代码片段有错误消息 function fn x string void function fn vo Expected to be able to call with zero a
  • Sign in With Google (GSI) 库的 TypeScript 类型声明在哪里?

    我正在使用以下方式实现 使用 Google 登录 Google GSI 库 https developers google com identity gsi web guides overview 我的应用程序使用 Next js 和 Ty
  • 如何在反应组件中使用聚合物组件?是否可以?

    我已经使用谷歌的聚合物来制作网络组件 但我也很有兴趣尝试一下 React 所以我想知道是否可以从反应组件的渲染函数内部使用聚合物组件 对的 这是可能的 我使用的方法有点复杂 但我很乐意分享 如果您已经使用过聚合物 则只需像使用任何其他聚合物
  • 如何在React Native的MapView中设置标记

    我想在React Native中的MapView上设置一个标记 但是通过官方文档找不到任何信息MapView https facebook github io react native docs mapview html content 如
  • 如何将require转化为第三方库的import语句?

    在我的打字稿项目中我使用 const program require commander const figlet require figlet const AWS require aws sdk 我想重构这些线路以通过import相反 为
  • onClick 处理程序在每个渲染周期触发

    我有这样的默认状态 this state selectedTab tab1 then 我的渲染方法是这样的 render const selectedTab this state return li tab1 li li tab2 li d
  • Ant design Tabs onClick 函数

    我使用 Ant 设计创建了选项卡 在第二个选项卡中 当我单击我想要触发的按钮或更改为第一个选项卡时 有一个按钮 这是我的代码
  • 如何在React中动态分配属性?

    这是一个有两个参数的函数 我要创建的标签的名称 具有以下属性的对象 Using React 我创建一个组件并将该元素渲染到 DOM 问题是我想向元素添加属性 但它不允许循环在元素内设置属性 var Element function elem
  • React Redux - 在辅助函数中访问现有存储

    我试图在反应组件之外获取存储实例 存储状态 即在单独的辅助函数中 我有我的减速器 我的动作 我在最上面的组件中创建了一个商店 configStore js import createStore from redux import gener
  • 混合联合类型、泛型和条件类型会导致意外的“类型不可分配给类型”错误

    我遇到了类型推断的问题 特别是当条件类型在联合类型中使用时 可能有一种更短的方法来证明这个问题 但我找不到一个 在此查看实际问题游乐场链接 https www typescriptlang org play ts 3 9 7 code PT
  • Angular8 firebase配置错误'@angular/fire/angularfire2'

    使用 firebase 配置 Angular 后尝试 ng 服务 时 出现错误 尽管我用谷歌搜索了这个错误消息但找不到任何东西 从错误信息来看 这个问题与库本身有关 user user MacBookPro post ng serve 10
  • 如何使用 Draft-js-mention-plugin 以编程方式添加提及?

    问题 我正在尝试为使用创建的内容创建一个编辑界面draft js draft js mention plugin 然而 editorState没有持久化 只有纯文本 提及被保存为对象数组 现在我需要使用该数据重新创建 editorState
  • 反应独特的“关键”错误

    我正在浏览 React 中的待办事项列表教程 并遇到以下错误 我花了相当长的时间 只是找不到错误 这是错误和组件的代码 这就是代码对于课程存储库 此提交中出现问题 https github com andrewjmead react cou
  • 如何使用 API 中的数据填充选择的下拉元素 - ReactJS

    我对 React 还很陌生 我正在从 API 获取数据 当我检查控制台日志时可以看到数据 但是我不知道如何使用 map 创建一个新数组 然后选项元素可以使用该数组来显示货币代码 目前它填充下拉列表 但选项元素全部为空 结果显示为 NaN 下
  • React Router Tabs——保持组件安装

    我使用 React Router 创建了选项卡 每个选项卡都有不同的路线 但是 我想通过保持隐藏选项卡的安装来维护选项卡转换之间的选项卡状态 我该如何实现这一目标 每次路由切换时 React 路由器都会重新安装每个组件 已经有人问过这个问题

随机推荐