我们在定义一个React组件的时候,在定义函数组件时,可以写明返回参数类型也可不写:
import React from 'react'
interface Props {
name: string
}
function Hello(props: Props): React.ReactElement {
return <>Hello</>
}
或者:
function Hello(props: Props) {
return <>Hello</>
}
请问下,写与不写的区别大吗?
推荐使用哪种方式呢?
都可以,tsc 会自动类型推断的。不过显式定义出来有几点好处:
一方面是可以约束返回值,避免函数内部可能存在某些分支情况下遗漏了返回值。比如:
function foo(): string {
if (someCondition) {
return; // tsc 会警告
}
return 'bar';
}
function foo() {
if (someCondition) {
return; // tsc 不会警告,并且返回值类型会自动推断成 string | undefined,与预期不符
}
return 'bar';
}
另一方面就是如果返回值是一个复杂类型,那么显式定义出来,在 IDE 里可以获得更好的智能提示。比如:
type Foo = {
id: number;
name: string;
略...
}
function foo(): Foo {
return {
id: // 在 IDE 里你此时可以获得智能提示
}
}
function foo() {
return {
id: // 没有智能提示。这点光看代码可能不太好理解,你自己在 VSCode 之类的里试一下就明白了
}
}
再有就是对于调用者而言可以更直观的“一眼看穿”,知道返回值类型是什么,这点不用举例你也应该懂。
当然了,不显式定义也不是没有好处,就俩字:
省事。
以上都是针对任意一种函数返回值定义而言,并不单单只对 JSX/TSX。
个人习惯是如果函数的返回值是一个复杂类型、或者内部逻辑比较复杂时,会显式声明,以期望获得更好的代码智能提示;否则就不声明。
这和 React 无关,而是 TypeScript。
可以根据个人习惯而定,我自己是不写的,自动推断即可。
但要是说,显式书写返回值完全没有好处,那也不既然,最起码也是一种检查,比如:
// 两者皆可
function add(a: number, b:number) {
return a + b
}
function add(a: number, b:number): number {
return a + b
}
// 无形之中出了点错,但是可以自动推断返回值为 `string`,没问题
function add(a: number, b:number) {
return a + b + ''
}
// 不可以!返回值类型不对
function add(a: number, b:number): number {
return a + b + ''
}
写或不写并不会影响执行, 因为TS会自动推断
但是建议写上:
本文向大家介绍React组件命名推荐的方式是哪个?为什么不推荐使用displayName?相关面试题,主要包含被问及React组件命名推荐的方式是哪个?为什么不推荐使用displayName?时的应答技巧和注意事项,需要的朋友参考一下 [react] React组件命名推荐的方式是哪个?为什么不推荐使用displayName?
本文向大家介绍js定义类的几种方法(推荐),包括了js定义类的几种方法(推荐)的使用技巧和注意事项,需要的朋友参考一下 ECMAScript6已经支持了class,但之前版本都不支持类,但是可以通过一些方法来模拟类。 js中的类,既是重点,也是难点,很多时候都感觉模棱两可。 首先强调一下js中很重要的3个知识点:this、prototype、constructor。 下面我们来总结一下定义(模拟)
本文向大家介绍javascript中$(function() {});写与不写有哪些区别,包括了javascript中$(function() {});写与不写有哪些区别的使用技巧和注意事项,需要的朋友参考一下 javascript中$(function() {....}) 是 jQuery 中的经典用法,等同于 $(document).ready(function() {....}),即在页面加
问题内容: 重写的方法可以有不同的返回类型吗? 问题答案: Java支持*协变返回类型的重写方法。这意味着重写的方法可能具有更特定的返回类型。也就是说,只要新的返回类型可分配给你要覆盖的方法的返回类型,就可以使用。 例如: 这在Java语言规范的8.4.5节中指定: 如果返回类型是引用类型,则返回类型在彼此覆盖的方法之间可能会有所不同。返回类型可替换性的概念支持协变返回,即返回类型到子类型的特殊化
本文向大家介绍react有几种构建组件的方式?可以写出来吗?相关面试题,主要包含被问及react有几种构建组件的方式?可以写出来吗?时的应答技巧和注意事项,需要的朋友参考一下 1.无状态函数式组件 function HelloComponent(props, /* context */) { return <div>Hello {props.name}</div> } ReactDOM.rende
重写的方法可以有不同的返回类型吗?