react typescript 访问定义不存在的属性或者变量
Posted 胖鹅68
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了react typescript 访问定义不存在的属性或者变量相关的知识,希望对你有一定的参考价值。
文章目录
一、文章参考
二、问题一:如何让编译机能监听到 props和state定义的interface
2.1 问题说明
在自己写的React项目中,定义了一个基类 BaseComponent,自己定义的所有类都要继承该类,实现统一管理某些“公共方法”的目的,由于BaseComponent 是一个使用 typescript 编写的,而且编译器检测 props 和 state 的值,是需要将inteface 是放到 React.Component 中的,有与中间隔了一个 BaseComponent ,这样就导致编译器无法检测具体业务组件需要传递的Props 和 State 的interface了
2.2. 解决办法 —— 使用泛型传递特性
- 定义好 “基础类”
import React, { Component } from 'react'
export default class BaseComponent<P, S> extends Component<P, S> {
constructor (props: P) {
super(props)
}
// 获取用户对象
getUserInfo (isGoLoginPage = true) {
const props: any = this.props
const userinfoStr = '{}'
// 如果没有该字段,则返回null
if (userinfoStr) {
return JSON.parse(userinfoStr)
} else {
if (isGoLoginPage) {
props.history.push('/login')
}
return null
}
}
}
- 业务类继承 “基础类”
import React from 'react'
// 直接引入scss文件,转为了css
import AsyncComponent from '@/core/AsyncComponent'
import BaseComponent from '@/core/BaseComponent'
import { Iprops } from '@/model'
const CommonPanelWrap = AsyncComponent(() => require('../child/CommonPanelWrap'))
interface Istate {
panelType: string
}
class LoginPage extends BaseComponent<Iprops, Istate> {
constructor (props: Iprops) {
super(props)
this.state = {
panelType: 'login' // 面板的状态 login scan findpwd1 findpwd2
}
}
render () {
const { panelType } = this.state
return (
<CommonPanelWrap key={panelType}>
aaaaa
</CommonPanelWrap>
)
}
}
export default LoginPage
二、问题二:在“基类”中去调用ts没有定义的属性
import React, { Component } from 'react'
export default class BaseComponent<P, S> extends Component<P, S> {
constructor (props: P) {
super(props)
}
// 获取用户对象
getUserInfo (isGoLoginPage = true) {
// 定义一个变量 props: any ,欺骗编译器
const props: any = this.props
const userinfoStr = '{}'
// 如果没有该字段,则返回null
if (userinfoStr) {
return JSON.parse(userinfoStr)
} else {
if (isGoLoginPage) {
// 后面就可以访问对应的属性和方法了
props.history.push('/login')
}
return null
}
}
}
以上是关于react typescript 访问定义不存在的属性或者变量的主要内容,如果未能解决你的问题,请参考以下文章
状态上不存在属性 - 使用带有 TypeScript 的 React Router Hooks
React:react-router-dom Typescript 中不存在 useLocation Hook
属性 '_env_' 在类型'Window & typeof globalThis 上不存在 - React / Typescript 错误
TypeScript 错误 - React mui MenuItem 上不存在属性组件
React Native,TypeScript - 无论设置了啥配置,类型“any []”上都不存在属性“包含”,“发现”