繁体   English   中英

TSLINT 错误:属性“Component”在类型“typeof React”上不存在

[英]TSLINT Error: Property 'Component' does not exist on type 'typeof React'

我下载了 [react-native-redux-typescript-boilerplate]: https ://reactnativeseed.com/。 该项目在android模拟器中运行流畅。 但是,存在大量 tslint 错误,尤其是在 JSX 语法(即 .tsx 文件)中。 一个主要的是https://reactnativeseed.com/

我使用 webstrom 作为我的代码编辑器,我交叉检查了 webstrom 和项目使用的打字稿版本。 有一样的。

这些是版本: 1. Typescript - 2.6.2 2. react-native - 0.59.6 3. react - 16.2.0 4. react-redux - 5.0.6 5. @types/react - "^16.8.14" 6. @types/react-native - “^0.47.7”

还有什么我需要检查的吗?

我还安装了 ["tslint-fix": "^0.1.3"]: https://www.npmjs.com/package/tslint-fix

例如: index.tsx

import * as React from "react";
import { Item, Input, Icon, Form, Toast } from "native-base";
import { Field, reduxForm } from "redux-form";
import Login from "../../stories/screens/Login";

const required = value => (value ? undefined : "Required");
const maxLength = max => value => (value && value.length > max ? `Must be ${max} characters or less` : undefined);
const maxLength15 = maxLength(15);
const minLength = min => value => (value && value.length < min ? `Must be ${min} characters or more` : undefined);
const minLength8 = minLength(8);
const email = value =>
    value && !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(value) ? "Invalid email address" : undefined;
const alphaNumeric = value => (value && /[^a-zA-Z0-9 ]/i.test(value) ? "Only alphanumeric characters" : undefined);

export interface Props {
    navigation: any;
    valid: boolean;
}
export interface State {}
class LoginForm extends React.Component<Props, State> {
    textInput: any;

    renderInput({ input, meta: { touched, error } }) {
        return (
            <Item error={error && touched}>
                <Icon active name={input.name === "email" ? "person" : "unlock"} />
                <Input
                    ref={c => (this.textInput = c)}
                    placeholder={input.name === "email" ? "Email" : "Password"}
                    secureTextEntry={input.name === "password" ? true : false}
                    {...input}
                />
            </Item>
        );
    }

    login() {
        if (this.props.valid) {
            this.props.navigation.navigate("Drawer");
        } else {
            Toast.show({
                text: "Enter Valid Username & password!",
                duration: 2000,
                position: "top",
                textStyle: { textAlign: "center" },
            });
        }
    }

    render() {
        const form = (
            <Form>
                <Field name="email" component={this.renderInput} validate={[email, required]} />
                <Field
                    name="password"
                    component={this.renderInput}
                    validate={[alphaNumeric, minLength8, maxLength15, required]}
                />
            </Form>
        );
        return <Login loginForm={form} onLogin={() => this.login()} />;
    }
}
const LoginContainer = reduxForm({
    form: "login",
})(LoginForm);
export default LoginContainer;

在 render() 的上述文件中显示了很多错误。 其中一些是: 1. 类型“typeof React”上不存在属性“Component”。 2. JSX 元素类型“Item”不是 JSX 元素的构造函数。 类型“Item”中缺少属性“render”。 还有更多类似的。

我终于解决了这个问题。 @types/react 使用的是 typescript 版本 2.8.1,而我的项目使用的是 typescript 版本 2.6.2。 因此,我将项目的打字稿版本升级到 2.8.1,错误消失了。

你忘了导入 React

import React, { Component } from 'react';

class LoginForm extends React.Component<Props, State>替换为class LoginForm extends Component<Props, State>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM