首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么状态在React TypeScript中首先返回空&属性不存在于类型'never‘上?

在React TypeScript中,当我们定义一个组件的状态(state)时,我们需要指定状态的初始值和类型。在某些情况下,当我们尝试在状态中返回一个空值时,TypeScript会报错并提示属性不存在于类型'never'上。

这是因为在React TypeScript中,状态的类型是通过泛型参数来定义的。当我们没有明确指定状态的类型时,TypeScript会默认将其推断为never类型,即表示永远不会有值的类型。因此,当我们尝试返回一个空值时,TypeScript会认为该属性不存在于never类型上,从而报错。

为了解决这个问题,我们需要明确指定状态的类型。可以使用React.FC(函数组件)或React.Component(类组件)来定义组件,并通过泛型参数指定状态的类型。例如,我们可以使用useState钩子来定义一个状态,并指定其类型为string

代码语言:txt
复制
import React, { useState } from 'react';

const MyComponent: React.FC = () => {
  const [myState, setMyState] = useState<string>('');

  // ...

  return (
    // JSX
  );
};

在上述示例中,我们明确指定了myState的类型为string,这样就可以安全地返回一个空值。

对于属性不存在于类型'never'上的问题,我们可以通过检查属性是否存在来避免报错。可以使用条件语句或可选链操作符(?.)来检查属性是否存在。例如:

代码语言:txt
复制
import React from 'react';

interface MyComponentProps {
  myProp?: string;
}

const MyComponent: React.FC<MyComponentProps> = ({ myProp }) => {
  if (myProp) {
    // 属性存在时的逻辑
  }

  // 或者使用可选链操作符
  const propValue = myProp?.length;

  // ...

  return (
    // JSX
  );
};

在上述示例中,我们通过条件语句和可选链操作符来检查myProp属性是否存在,从而避免了属性不存在于类型'never'上的报错。

总结:在React TypeScript中,当状态返回空值时,属性不存在于类型'never'上的报错是由于没有明确指定状态的类型。我们可以通过明确指定状态的类型来解决这个问题,并使用条件语句或可选链操作符来检查属性是否存在。

相关搜索:typescript属性“type”在类型“never”上不存在React/Typescript属性'ID‘在类型’never‘上不存在。.ts(2339)在Ngrx效果中,类型'never‘上不存在属性属性不存在于NextJs的axios响应中的类型‘never’上。.ts(2339)在具有TypeScript的React本机类型中,'object‘类型上不存在属性React Typescript中的类型'EventTarget‘上不存在属性'elements’从React.js转换为React.tsx属性'id‘在类型'never’上不存在。TS2339为什么TypeScript给出错误消息属性'value‘在类型'unknown’上不存在?在JointJS中,我得到错误属性html不存在于类型'typeof shapes‘上在声明对象后添加属性时,在TypeScript中获取“属性'FOO‘在类型上不存在”TS2339:当移植到Typescript时,在类型“”typeof React“”上不存在属性“”PropTypes“”Redux Saga中的Typescript :属性'then‘在类型'void’上不存在。TS2339类型'EventTarget‘上不存在属性'value’。"value“在React.SyntheticEvent<HTMLElement>中不存在TypeScript React中的可重用布局组件:类型“”IntrinsicAttributes&IProps“”上不存在属性“”path“”为什么typescript不能确保在React中添加额外属性的通用高阶组件中的类型安全?属性在尝试将布尔值和接口传递到组件状态时,React/Typescript中缺少类型?带有Vetur的VSCode中带有Typescript的本机脚本-Vue:带有然后给出属性' then‘的警报在类型'void’上不存在类型“RelayObservable<unknown>”上不存在属性“”then“”。“”当我尝试在react中使用relay来获取数据时。我不知道为什么会出现这个错误为什么typescript在我的IDE中给我一个错误,说一个可观察对象上的属性不存在,但却显示它们存在?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【TS 演化史 -- 17】各文件的JSX工厂 、有条件类型和映射类型修饰符

作者:Marius Schulz 译者:前端小智 来源:https://mariusschulz.com/ 各文件的JSX工厂 TypeScript 2.8允许咱们每个文件的基础指定JSX工厂名。...never类型TypeScript 的底层类型,表示从未出现的值的类型。 分布式有条件类型 那么,为什么e 条件类型never类型的组合是有用的呢?它有效地允许咱们从联合类型删除组成类型。...}["name"] | { name: "name"; email: never }["email"]; 现在,咱们可以两个对象类型查找name和email属性。...:User类型,只有name属性不可空。...P : never; 注意,Parameters类型在结构与ReturnType类型几乎相同。 主要区别在于infer关键字的位置。

2.5K20
  • TypeScript 类型体操,无非是语法过度嵌套而已

    我的第 136 篇原创 写这篇文章的初衷,是因为又有一个粉丝朋友被 TypeScript类型体操逼疯了。他跟我吐槽了一通,然后问我是不是他使用 TS 的姿势不对,为什么感觉到的全是痛苦。...当然,我自己最近也对 TypeScript 怨念颇深,因为我把自己项目中的 React 升级到了 "react": "^18.2.0" ,对应的类型 "@types/react": "^18.2.45"...Latest : never 一个小小的三目运算符,叠加了好几个基础语法。 然后,我的问题就是,类型的逻辑里,一个数组,为什么要有不同类型的子项?...以我之前 React 知命境,自定义 hook 的一个案例为例,使用层面,我的写法是这样的 const { loading, setParam, list = [], error...列举一个例子,很多年前我 github 基于 react hooks 封装了一个小型的状态管理工具 moz,我也做到了使用时无 TS 痕迹,能够自动推导出定义 store 的具体数据类型 地址

    27410

    类型即正义:TypeScript 从入门到实践(一)

    现代 JavaScript 世界,已经有很多大型库使用 TypeScript 重构,包括前端三大框架:React、Vue、Angular,还有知名的组件库 antd,material,很多公司内部的大型业务应用也在用...never等,这是基础类型,我们甚至可以基于类型进行编程,使用类型版本的控制、组织结构来完成高级类型的编写,进而将类型附着 JavaScript 对应的编程语言特性,将 JS 静态化,使得我们可以在编译期间就能发现类型的错误...所以你看呀,TS 的优秀之处在于,你完全可以 TS 的环境写 JS 还能享受 TS 带来的各种静态语言的优势,所以这么受欢迎也是可以理解滴。...never / 函数类型定义与实战 never 的字面意思是 “永不”, TS 中代表不存在的值类型,一般用于给函数进行类型声明,函数绝不会有返回值的时候使用,比如函数内抛出错误,我们首先看个例子将讲解一下如何给函数进行类型声明...这里的 interface 我们还没用提到,我们将马上在后面讲到,可以理解它类似 JS 的对象,用来组织一组类型,就比如我们这里 todoList 单个元素实际是包含四个属性的对象,其中前三个属性

    2.6K20

    TypeScript进阶 之 重难点梳理

    首先推荐下 ts 的编译环境:typescriptlang.org 再推荐笔者收藏的几个网站: Typescript 中文网 深入理解 Typescript TypeScript Handbook TypeScript...never : T; 以上语句的意思就是 如果 T 能赋值给 U 类型的话,那么就会返回 never 类型,否则返回 T,最终结果是将 T 的某些属于 U 的类型移除掉 举个栗子: type T00...这种机制,我们称之为 「类型断言」 const nealyang = {}; nealyang.enName = 'Nealyang'; // Error: 'enName' 属性不存在于 ‘{}’ nealyang.cnName...= '一凨'; // Error: 'cnName' 属性不存在于 '{}' interface INealyang = { enName:string; cnName:string; }...下的终极React组件模式 【速查手册】TypeScript 高级类型 cheat sheet 高级类型 TypeScript React 中使用总结

    3.9K20

    以淘宝店铺为例,谈谈 TypeScript ESLint 规则集考量

    使用 {} 会让你寸步难行:类型 {} 不存属性 'foo',所以用了 {} 你大概率在下面还需要类型断言回去或者变 any,使用 object Function 毫无意义。...: boolean; if (someCondition === true) { } 为什么首先,记住我们是TypeScript,所以不要想着你的变量值还有可能是 null 所以需要这样判断,...为什么首先,这两种方式被称为 method 与 property 很明显是因为其对应的写法,method 方式类似于 Class 定义方法,而 property 则是就像定义普通的接口属性,只不过它的值是函数类型...值导入与类型导入 TypeScript 中使用不同的堆空间来存放,因此无须担心循环依赖(所以你可以父组件导入子组件,子组件导入定义父组件类型这样)。...你也可以通过 TypeScript never 类型来实现实际代码的检验: const strOrNumOrBool: string | number | boolean = false; if

    2.7K30

    分享 30 道 TypeScript 相关面的面试题

    07、 TypeScript 中将属性标记为可选时,使用什么语法?你为什么要这样做? 答案: TypeScript ,? 符号用于将属性标记为可选,例如 name?: string。...09、为什么泛型 TypeScript 至关重要?它们如何发挥作用? 答:泛型允许创建灵活且可重用的组件,而无需牺牲类型安全性。...使用只读数组可确保数组创建后无法修改,这对于确保数据不变性特别有用,例如在函数或组件之间传递数据时。 16、TypeScript never 类型意味着什么?...答:要将 TypeScriptReact 集成,可以使用 .tsx(TypeScript 与 JSX)文件。对于组件属性状态,可以定义 TypeScript 接口或类型。...22、什么是映射类型,以及如何在 TypeScript 中使用它们? 答案:映射类型允许通过转换属性现有类型的基础创建新类型。它们遵循一种模式,您可以在其中迭代对象类型属性并生成新类型

    77830

    「译」这种模式将破坏你React应用的TS性能

    Your React App's TS Performance作者:Matt Pocock几年前,Sentry 在他们的 React 应用程序遇到了大问题。...如何拖垮你的 React 应用的 TS 性能在 Sentry 的代码库的许多地方,他们都在扩展 React 的 HTML 类型。...另一方面,交集只是递归地合并属性,并且某些情况下会产生never接口创建一个单一的平面对象类型来检测属性冲突,这通常对于解决很重要! 。...事实,interface extends 稍微比 & 快一些。本文的早期版本,我发布了基于一些模糊思维的解释,这要感谢我的老同事Mateusz Burzyński,我现在明白是错误的。...可以说 - interface extends 通常比 & 更快,因此本例也得到了证明。

    8410

    初探TypeScript

    首先,我们需要对TypeScript有一个初步的认识:TypeScript是JavaScript的一个超集,它支持ES6、提供了类型系统,一定程度上便捷了我们的开发和调试工作。...为什么TypeScript TypeScript的定位是静态类型语言,而不是类型检查器;JavaScript作为一门解释型语言,动态数据类型的变量,很可能出现在编译过程,因为数据类型问题而把时间耗费...debug过程,大大降低了开发效率;TypeScript类型机制,能让开发者通过对类型监控程度的控制,大大减少甚至杜绝由变量类型引起的报错;这种开发手段,构建大型项目或多人协作项目,都能起到很好的正面作用...TypeScript类型 TypeScript声明变量时,可同时定义变量值的类型: //类型包含number,undefined,Boolean,string,any,never,Array<type...但不足在于,学习成本可能需要些时间,引入第三方JS库的时候,一般都不会有.ts文件。

    82720

    TS 类型验算,高级通用 API 实现

    前言由于现在工作使用的技术栈是 ReactTypeScript 和 ahooks,工作需要用到大量的类型定义,特此记录一下一些常用的 类型通用API 封装。...TS 内置类型Partial:将 T 所有属性变为可选属性Required:将 T 所有属性变为必选属性Readonly:将 T 所有属性变为只读属性NonNullable:过滤...T 类型的 null 及 undefined 类型Parameters:获取函数的参数类型,将每个参数类型放在一个元组Omit:从类型 T 剔除 K 的所有属性Pick:从类型 T 挑选 K 的所有属性Exclude:提取存在于 T,但不存在于 U 的类型组成的联合类型Extract:提取联合类型 T 和联合类型 U 的所有交集Record...typeof:类型上下文中获取变量或者属性类型in:常用来遍历枚举类型TS compiler 内部实现的类型Uppercase:构造一个将字符串转大写的类型Lowercase:构造一个将字符串转小写的类型

    18110

    Typescript真香秘笈

    纯粹的js语法,typescript是完全兼容的。...缺乏类型检查,低级错误出现几率高。 人的专注力很难一直都保持高度在线状态,如果没有类型检查,很容易出现一些低级错误。...如果给变量赋予与其声明类型不兼容的值,就会有报错提示。 例如: Array 数组类型 typescript,有两种声明数组类型的方式。...我们实现request函数的时候,实际是不能知道响应字段有哪些内容的,因为这跟特定的请求相关。 所以我们将类型确定的任务留给了调用者。...如果项目很庞大,无法一下子全部重构,实际也不妨碍使用ts。 tsconfig.json文件配置allowJs: true就可以兼容js。 对于项目中的js文件,有三种处理方式。 不做任何处理。

    5.6K20

    TypeScript小笔记

    陆陆续续从文档上手TypeScript,发现仍然还是有很多不懂。 比如各种框架的常用类型,ts内置的常用类型,以及一些容易被忽略和遗忘的点,陆陆续续顺手把他们写到文章记录起来。...比如,现在我们想要用属性名从对象里获取这个属性。 并且我们想要确保这个属性在于对象 obj ,因此我们需要在这两个类型之间使用约束。...| number 有 string, 有string就返回never,就代表将其排除 Omit 3.5 版本之后,TypeScript lib.es5.d.ts 里添加了一个 ​Omit...当我们声明一个类的时候,其实声明的是这个类的实例类型和静态类型两个类型。 类的静态类型包含类的所有静态成员和构造函数 类的实例类型包含类的实例方法和属性(包括原型的实例方法和属性)。...复制代码 React & TS内置类型 React.ReactNode 源码类型关于ReactNode的类型定义 type ReactNode = ReactChild | ReactFragment

    1K20

    【TS】217-TypeScript - 一种思维方式

    命令行执行下述命令即可生产可直接使用的项目: # 使用 yarn $ yarn create react-app TS-react-playground --typescript # 使用 npx...$ npx create-react-app TS-react-playground --typescript 随后如果需要,可以tsconfig.json添加额外的配置。...对我来说,学习 TS 最大的难点就在于这套类型系统中有着一些我之前很少了解的概念,在这里可以大致的梳理一下。 一些 TS 的新概念 编程实际就是对数据进行操作和加工的过程。...类型系统能辅助我们对数据进行更为准确的操作。TypeScript 的核心就在于其提供一套类型系统,让我们对数据类型有所约束。约束有时候很简单,有时候很抽象。...TS 每隔几个月就会发布一个新的小版本,每个小版本 TypeScript 官方博客[3] 都会有专门的说明,可用用作跟进学习 TS 的参考。

    94320

    使用 TypeScript 开发 React Hooks

    React 类组件编写原生 TypeScript 着实痛苦,因为 React 开发者不得不同时对 props 和 state 定义类型,即便二者的许多属性是相同的。...并在其相关的 state ,创建一个 Quotation 类型属性,以及指示已签署或未签署的状态。...React hooks 中使用 TypeScript类组件容易。...适配 hooks 的 TypeScript 特性 之前的 React hooks TypeScript 例子,对于 QuotationProps 接口中的属性如何使用、使用哪些,仍是不甚了了、颇有不便...结合 type 关键字反手就能甩出一个新类型。 Partial 和 Omit 并不存在于 Java 等大部分强类型语言中,但常在前端开发以各种方式大展身手。它们简化了类型定义的负担。

    2K10

    TypeScript 基础教程

    为什么学习TS *** 因为大家都在用,React、Vue、Angular、Antd、Element-UI、Mobx、Redux… 因为大家都在学,既是一个前端的趋势也是提升扩展个人技术的不错方法。...为什么需要使用TS *** 通过引入强类型系统,补充JS的短板。原生JS类型的灵活性导致实际环境可能会出现各种不确定的bug。...> void) { let foo = callback(); } never: 定义:表示永远不存在的值类型,比如:程序运行报错,程序陷入了无线循环。...如数组声明: let arr53: Array = [true, 100, "bar"]; 其次如当我们需要返回一个变量的长度时,首先这个变量需要一个长度的属性那么...) as HTMLElement; } 类型推论: 定义:TypeScript 会通过变量或返回值等赋值时推导出这个值的类型,如果在随后的代码又进行了不同类型的值赋值,那么编译会报错: let foo

    1.1K20

    TypeScript 可辨识联合类型

    原因是 Motorcycle 接口中,并不存在 capacity 属性,而对于 Car 接口来说,它也不存在 capacity 属性。那么,现在我们应该如何解决以上问题呢?...,我们使用 switch 和 case 运算符来实现类型守卫,从而确保 evaluatePrice 方法,我们可以安全地访问 vehicle 对象的所包含的属性,来正确的计算该车辆类型所对应的价格...为什么会提示这个错误信息呢?原因是因为我们之前创建的 evaluatePrice 方法还没处理 Bicycle 类型。...答案是有的,可以利用 TypeScript never 类型,具体代码如下: function evaluatePrice(vehicle: Vehicle) { switch(vehicle.vType... evaluatePrice 方法,我们新增了默认的处理分支,穷举了所有可能的车辆类型。此外我们还引入了 never 类型避免出现新增了联合类型没有对应的实现,目的就是写出类型绝对安全的代码。

    2.6K10

    typescript4.2新特性

    结果和你想的可能不一样,如下图所示: 那为什么会这样? 好吧,这与TypeScript如何在内部表示类型有关。...TypeScript 4.2,内部结构就变得更加智能了,你可以 TS Playground 中切换编译版本为4.2,你会发现类型推断很完美,如下图所示: 不可跟踪的rest元素 TS我们可以用元组类型去标识一个数组的类型...TypeScript 4.2允许您在构造函数签名指定抽象修饰符。...lib.d.ts 的更新 noImplicitAny错误适用于宽松的yeild表达式: # 首先设置noImplicitAny为true "noImplicitAny": true 然后4.2运行以下代码...4.2版本后,TypeScript设置了限制器以避免执行所有工作。 .d.ts扩展 不能在导入路径中使用 TypeScript 4.2,导入路径包含.d.ts现在是错误的。

    89010

    TypeScript 官方手册翻译计划【三】:类型收缩

    这里的重点在于TypeScript类型系统旨在让开发者尽可能轻松地编写常规的 JavaScript 代码,而不必为了获得类型安全而费尽心思。 虽然看起来可能不多,但实际这个过程藏着很多秘密。...如果我们赋值给 x 一个 boolean 类型的值,那么就会抛出一个错误,因为声明类型不存在 boolean 类型。 let x = Math.random() < 0.5 ?...它们还适用于表示 JavaScript 任意类型的消息传递方案,比如在网络发送消息(客户端/服务端通信)或在状态管理框架的 mutation 进行编码等。...never 类型 收缩类型的时候,你可以将联合类型减少到一个仅存的类型,这时候,你基本已经排除了所有的可能性,并且没有剩余的类型可选了。...此时,TypeScript 会使用 never 类型去表示一个不应该存在的状态

    2K20

    React Hooks-useTypescript!

    React v16.8新增了Hook,它提供了函数组件访问状态React生命周期等能力,这些函数可以程序的各个组件之间复用,达到共享逻辑的目的。...之前React, 我们只能通过 Higher Order Components(高阶组件)跟Render Props(渲染属性)来共享逻辑。...对于函数组件写法的改变 之前React函数组件被称为Stateless Function Components,因为它们没有状态。有了Hook之后,函数组件也可以访问状态React生命周期。...通过实现自定义hook,我们可以把一些逻辑抽成可复用的函数,之后我们的组件引入。唯一需要注意的是使用hook要遵守某些规则。至于这些规则为什么存在,我之前也稍微聊到过,后面我们再单独具体说说。...返回的对象会存在于组件的整个生命周期,ref 的值可以通过把它设置到一个React元素的 ref属性上来更新。

    4.2K40
    领券