首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

用TypeScript编写React的最佳实践

通过同时使用它们,我们实际是使用 JavaScript 的类型化版本来构建 UI。...因为第二个实例返回一个函数,而不是一个值或表达式,所以我们我们注明了这个函数返回值是 React.FC 类型。 记住这两种方式可能会让人混淆。这主要取决于设计选择。...处理表单事件 最常见的情况之一是 onChange 在表单的输入字段正确键入使用的。...但是你可能想要修改一两个属性。还记得我们如何看待两种类型组件 Props、type 或 interfaces 的方法吗?取决于你使用的组件决定了你如何扩展组件 Props 。...如果您希望看到它的实际效果,可以在GitHub看到这个示例。 https://github.com/jsjoeio/react-ts-example

4.7K51

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

TypeScript原标题:This Pattern Will Wreck Your React App's TS Performance作者:Matt Pocock几年前,Sentry 在他们的 React 应用程序遇到了大问题...例如,定义 ButtonProps 将如下所示:import React from "react"; type ButtonProps = React.HTMLAttributes & { extraProp: string; }; const Button = ({ extraProp, ...props }: ButtonProps) => { console.log...另一方面,交集只是递归地合并属性,并且在某些情况下会产生never接口创建一个单一的平面对象类型来检测属性冲突,这通常对于解决很重要! 。...事实,interface extends 稍微比 & 快一些。在本文的早期版本中,我发布了基于一些模糊思维的解释,这要感谢我的老同事Mateusz Burzyński,我现在明白是错误的。

7610

React + TypeScript 实践

的区别是: React.FC 显式地定义了返回类型,其他方式是隐式推导的 React.FC 对静态属性:displayName、propTypes、defaultProps 提供了类型检查和自动补全...React.FC 为 children 提供了隐式的类型(ReactElement | null),但是目前,提供的类型存在一些 issue[6](问题) 比如以下用法 React.FC 会报类型错误:...,而 interface 可以随时扩展 interface Animal { name: string } // 可以继续在原有属性基础,添加新属性:color interface Animal...// 获取参数类型 import { Button } from 'library' // 但是未导出props type type ButtonProps = React.ComponentProps...: 可空类型的空断言 as: 类型断言 is: 函数返回类型类型保护 Tips 使用查找类型访问组件属性类型 通过查找类型减少 type 的非必要导出,如果需要提供复杂的 type,应当提取到作为公共

6.4K60

React + TypeScript 实践

的区别是: React.FC 显式地定义了返回类型,其他方式是隐式推导的 React.FC 对静态属性:displayName、propTypes、defaultProps 提供了类型检查和自动补全...React.FC 为 children 提供了隐式的类型(ReactElement | null),但是目前,提供的类型存在一些 issue[6](问题) 比如以下用法 React.FC 会报类型错误:...,而 interface 可以随时扩展 interface Animal { name: string } // 可以继续在原有属性基础,添加新属性:color interface Animal...// 获取参数类型 import { Button } from 'library' // 但是未导出props type type ButtonProps = React.ComponentProps...: 可空类型的空断言 as: 类型断言 is: 函数返回类型类型保护 Tips 使用查找类型访问组件属性类型 通过查找类型减少 type 的非必要导出,如果需要提供复杂的 type,应当提取到作为公共

5.3K20

深度讲解TS:这样学TS,迟早进大厂【11】:类型断言

当我们引用一个在此类型不存在属性或方法时,就会报错: const foo: number = 1; foo.length = 1; // index.ts:2:5 - error TS2339:...上面的例子中,数字类型的变量 foo 是没有 length 属性的,故 TypeScript 给出了相应的错误提示。 这种错误提示显然是非常有用的。...上面的例子中,我们需要将 window 添加一个属性 foo,但 TypeScript 编译时会报错,提示我们 window 不存在 foo 属性。...此时我们可以使用 as any 临时将 window 断言为 any 类型: (window as any).foo = 1; 在 any 类型的变量,访问任何属性都是允许的。...,那么被断言为父类,获取父类的属性、调用父类的方法,就不会有任何问题,故「子类可以被断言为父类」 需要注意的是,这里我们使用了简化的父类子类的关系来表达类型的兼容性,而实际 TypeScript 在判断类型的兼容性时

1.2K20

优秀组件设计的关键:自私原则

当把组件从设计转化为开发时,常常会发现一些属性与内容有关,而与组件本身无关。这种考虑周到的组件设计方法导致了复杂的属性、更陡峭的学习曲线和最终的技术债务。...例如,如果不给 ButtonProps 类型增加巨大的复杂性,就无法阻止一个人同时使用 icon 和 text prop。这可能会破坏用户界面,或者在Button组件本身中用更复杂的条件来解决。...// 首先,从React扩展原生HTML按钮属性,如onClick和disabled type ButtonProps = React.ComponentPropsWithoutRef<"button"...许多元素只不过是语义的容器而已。我们并不经常期望一个章节元素能够为其内容提供样式。一个按钮元素只是一个非常特殊的语义容器类型。当把它抽象为一个组件时,同样的方法可以适用。...它们可能存在于任何给定的视图中,也可能不存在。我们还了解到,关闭按钮的功能是独立的,不与任何特定的布局或部分相联系。

1.8K30

深度讲解TS:这样学TS,迟早进大厂【19】:泛型

泛型约束§ 在函数内部使用泛型变量的时候,由于事先不知道它是哪种类型,所以不能随意的操作它的属性或方法: function loggingIdentity(arg: T): T { console.log...(arg.length); return arg; } // index.ts(2,19): error TS2339: Property 'length' does not exist on...上例中,泛型 T 不一定包含属性 length,所以编译的时候报错了。 这时,我们可以对泛型进行约束,只允许这个函数传入那些包含 length 属性的变量。...,其中要求 T 继承 U,这样就保证了 U 不会出现 T 中不存在的字段。...[i] = value; } return result; } createArray(3, 'x'); // ['x', 'x', 'x'] 进一步,我们可以把泛型参数提前到接口名

60130

【译】Typescript 3.8 常用新特性一览

1、类型限制的导入导出方法 (Type-Only Imports and Export) TypeScript 3.8为仅类型导入和导出添加了新语法。...使用这样的导入的新类型也是不支持扩展等方法的 import type { Component } from "react"; interface ButtonProps { // ......TypeScript 辅助功能修饰符,例如 public,private 不能在私有字段使用。 私有字段包含的类之外被检测到,我们称这种为严格的隐私模式。...2.2 Private Fields 的使用规范 除了能保存自己的私有这一属性以外,私有字段的另一个好处是我们刚才提到的唯一性。例如,常规属性声明易于在子类中被覆盖。...当涉及到属性时,TypeScript的private修饰符会并没有完全正确的执行,它的行为完全像普通属性一样,并且没有办法告诉它是使用private 修饰符并没有完全的生效。

86120

TypeScript学习笔记(二)—— TypeScript基础

: number; } let tom: Person = { name: 'Tom', age: 25 }; 可选属性的含义是该属性可以不存在。...当我们引用一个在此类型不存在属性或方法时,就会报错: const foo: number = 1; foo.length = 1; // index.ts:2:5 - error TS2339:...上面的例子中,数字类型的变量 foo 是没有 length 属性的,故 TypeScript 给出了相应的错误提示。 这种错误提示显然是非常有用的。...上面的例子中,我们需要将 window 添加一个属性 foo,但 TypeScript 编译时会报错,提示我们 window 不存在 foo 属性。...此时我们可以使用 as any 临时将 window 断言为 any 类型: (window as any).foo = 1; 在 any 类型的变量,访问任何属性都是允许的。

5K20
领券