解决typescript报错:不能调用可能是未定义的对象

背景:当我们在react中封装组件并复用时,会传不同的props,那么自然有些props是不需要传的,所以在定义interface的时候需要加个问号。但这也就引来了标题的报错!

模拟一下报错代码:

// 父组件
const handleVisible () => {

}

export default function Father(props: IProps) {

	return (
		<Child/>
		<Child handleVisible={handleVisible}/>
	)
}
// 子组件
interface IProps {
	handleVisible?: () => void
}

export default function Child(props: IProps) {
	reutrn (
		// xxxxxxx
	)
	const getList = async () => {
		// 假设进行异步请求之后会调用父组件的``handleVisible``方法
		const res = await getlist()
		props.handleVisible() // 这段代码这个时候会报错!!!因为我们调用了两次子组件,只有一个传了handleVisible方法,所以ts不会让你执行
	}
}

解决方法也很简单:

1.先检查是否有该方法再执行。 即props.handleVisible && props.handleVisible()

2.类型断言。 即props.handleVisible!()

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
当在HTML中直接引入TypeScript的.ts文件时,出现SyntaxError: Unexpected token '<'的报错是因为浏览器无法识别并解析TypeScript代码。浏览器只能理解和执行JavaScript代码,而不是TypeScript代码。因此,当直接引入.ts文件时,浏览器会将其视为无法识别的语法错误。 为了解决这个问题,你可以使用TypeScript编译器将.ts文件转换为浏览器可以理解的JavaScript代码。可以使用命令行工具或构建工具(如webpack)将TypeScript代码编译为JavaScript代码。然后,在HTML文件中引入编译后的JavaScript文件即可避免该报错。 另外,在你提供的代码示例中,引入.ts文件的script标签中使用了相对路径"./test.ts",请确保路径是正确的,并且确保已经正确配置了TypeScript编译环境。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [TypeScript Uncaught SyntaxError: Unexpected token ‘:](https://blog.csdn.net/zz00008888/article/details/125262327)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [nebbia:JavaScript模板文字(模板字符串)编译器](https://download.csdn.net/download/weixin_42168902/15499261)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值