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

鸿蒙高质量代码静态检测200条二

@typescript-eslint/no-unnecessary-type-arguments当类型参数和默认值相同时,不允许显式使用@typescript-eslint/no-unnecessary-type-assertion...禁止不必要的类型断言@typescript-eslint/no-unnecessary-type-constraint不允许在泛型中使用不必要的约束条件@typescript-eslint/no-unused-expressions...循环而不是标准“for”循环@typescript-eslint/prefer-function-type强制使用函数类型而不是带有签名的对象类型@typescript-eslint/prefer-includes...@typescript-eslint/prefer-reduce-type-parameter调用“Array#reduce”时推荐使用类型参数而不是强制转换类型@typescript-eslint/prefer-regexp-exec.../triple-slash-reference不允许某些三斜杠引用,推荐使用ES6风格的导入声明@typescript-eslint/type-annotation-spacing类型注释前后需要一致的空格风格

6900

Typescript 类型的本质是什么

第二种是带泛型的静态类型系统,泛型也叫类型参数,具体的类型可以通过泛型参数来动态确定,多了一定的灵活性。...比如: T add(T a, T b) { return a + b; } 支持高级类型的静态类型系统 第三种是支持高级类型的静态类型系统,高级类型就是生成类型的类型,它除了可以传泛型参数外还可以支持分支...Tuple : RepeatN; 它的作用是当传入泛型参数时,返回该参数重复 n 次的元组: type res = RepeactN参数在 ts 类型里就是泛型参数,变量在 ts 类型里也用泛型参数来存储,循环在 ts 类型利用递归来实现,所以就是这样的: 首先定义类型,Item 是重复的目标, n 是个数,然后第三个参数...其实高级类型的所谓类型体操也没有那么难,只要想清楚要表达的逻辑,然后一步步用相应的语法实现即可,只不过语法会有一些别扭,比如变量用泛型参数实现、循环用递归实现等,但只要理清逻辑,实现起来还是不难的。

1.4K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Typescript 类型的本质是什么

    第二种是带泛型的静态类型系统,泛型也叫类型参数,具体的类型可以通过泛型参数来动态确定,多了一定的灵活性。...比如: T add(T a, T b) { return a + b; } 支持高级类型的静态类型系统 第三种是支持高级类型的静态类型系统,高级类型就是生成类型的类型,它除了可以传泛型参数外还可以支持分支...Tuple : RepeatN; 它的作用是当传入泛型参数时,返回该参数重复 n 次的元组: type res = RepeactN参数在 ts 类型里就是泛型参数,变量在 ts 类型里也用泛型参数来存储,循环在 ts 类型利用递归来实现,所以就是这样的: 首先定义类型,Item 是重复的目标, n 是个数,然后第三个参数...其实高级类型的所谓类型体操也没有那么难,只要想清楚要表达的逻辑,然后一步步用相应的语法实现即可,只不过语法会有一些别扭,比如变量用泛型参数实现、循环用递归实现等,但只要理清逻辑,实现起来还是不难的。

    1.6K30

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

    为什么:类似于 array-type,做语法统一,但需要注意的是在 Tsx 项目中使用 断言会导致报错,因为不像泛型可以通过 来显式告知编译器这里是泛型语法而非组件...prefer-for-of 在你使用 for 循环遍历数组时,如果索引仅仅用来访问数组成员,则应该替换为 for...of。...no-unnecessary-type-arguments 不允许与默认值一致的泛型参数,如: function foo() {} foo(); 为什么:出于代码简洁考虑...no-unnecessary-type-constraint 不允许与默认约束一致的泛型约束,如:interface FooAny {}。...值导入与类型导入在 TypeScript 中使用不同的堆空间来存放,因此无须担心循环依赖(所以你可以父组件导入子组件,子组件导入定义在父组件中的类型这样)。

    2.7K30

    TypeScript - 泛型

    ,当你需要在接口范围内多次用到泛型参数时,可以将它提前到接口名。...不一定,如果你的需求只会用到一次泛型参数时,那就不必把泛型参数提前到接口名,因为在多人协同合作中,可能会引起其他使用者的误会。 泛型约束 泛型约束提供更智能的类型推导,为类型提供扩展。...有时候我们希望泛型参数符合某些规则时,你应该想到使用泛型约束来解决问题。 基于接口约束 使用泛型约束来对 formatArr 做一些改造,改造后的函数功能为对传入的参数进行切片,返回除第一项的数据。...泛型参数的默认类型 在 TypeScript 2.3 以后,我们可以为泛型中的类型参数指定默认类型。当使用泛型时没有在代码中直接指定类型参数,从实际值参数中也无法推测出时,这个默认类型就会起作用。...,不难发现泛型的强大,可变的类型变量和泛型约束为 TypeScript 的类型推导都提供了很大的贡献。

    1.2K10

    编写高质量可维护的代码:Awesome TypeScript

    TypeScript 是 JavaScript 的一个超集,它的设计初衷并不是为了替代 JavaScript,而是基于 JavaScript 做了一系列的增强,包括增加了静态类型、接口、类、泛型、方法重载等等...#name; // 访问会报错 泛型 应用场景:当我们需要考虑代码的可复用性时,就需要用到泛型。让组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型。...泛型允许同一个函数接受不同类型参数,相比于使用 Any 类型,使用泛型来创建的组件可复用和易扩展性要更好,因为泛型会保留参数类型。泛型可以应用于接口、类、变量。...下面用一些示例来说明下泛型的使用: 泛型接口 interface identityFn { (arg: T): T; } 泛型类 class GenericNumber...使用大写字母 A-Z 定义的类型变量都属于泛型,常见泛型变量如下: T(Type):表示一个 TypeScript 类型 K(Key):表示对象中的键类型 V(Value):表示对象中的值类型 E(Element

    2.4K10

    Typescript学习笔记,从入门到精通,持续记录

    而不是第一次给只读属性赋值的时候 5.数组的类型 //最简单的方法是使用「类型 + 方括号」来表示数组 let fibonacci: number[] = [1, 1, 2, 3, 5]; //数组泛型...换句话说,可选参数后面不允许再出现必需参数了 6.2 参数默认值 在 ES6 中,我们允许给函数的参数添加默认值,TypeScript 会将添加了默认值的参数识别为可选参数,此时就不受「可选参数必须接在必需参数后面...6.4 重载 重载允许一个函数接受不同数量或类型的参数时,作出不同的处理。...6.泛型 泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性。...故当我们在书写一个全局变量的声明文件时,如果需要引用另一个库的类型,那么就必须用三斜线指令 当我们需要依赖一个全局变量的声明文件时,当我们需要依赖一个全局变量的声明文件时,由于全局变量不支持通过 import

    2K50

    TypeScript 4.7 beta 发布:NodeJs 的 ES Module 支持、新的类型编程语法、类型控制流分析增强等

    4.6 版本中增强了这一策略,不再关注 结构的泛型参数中引用了结构进行套娃 这种来自于明确指定的特殊情况,即,关注点现在变成了嵌套层级。...能够从 produce 函数的返回值推导出泛型参数 T 的类型,并应用到 consume 函数的入参类型中。...泛型实例化表达式 Instantiation Expressions 毫不夸张的说,泛型的实例化表达式是本次更新我最期待的功能之一,它支持了对泛型的预填充而无需实际调用。...如果你还没有习惯 TypeScript 的类型编程模式,你可能会想到这里是否还能更简单一些,比如在 infer 提取时就声明一个约束(类似于泛型约束那样),确保只会在这个位置的类型满足条件时才返回此类型...类型参数的兼容性,现在在启用 strictNullChecks 的情况下,无默认值的泛型参数不能分配给类型 {}。

    5.9K30

    检查JavaScript文件_TypeScript笔记18

    写在前面 TypeScript 的类型检查不仅限于.ts,还支持.js 但为了确保文件内容只含有标准的 JavaScript 代码,.js文件按照 ES 语法规范来检查,因而不允许出现 TypeScript...(somebody = 'John Doe')表明somebody可选,类型系统会综合这些信息进行推断 未指定的类型参数默认any JavaScript 没有提供用来表示泛型参数的语法,因此未指定的类型参数都默认...any类型 泛型在 JavaScript 中主要以 2 种形式出现: 继承泛型类,创建 Promise 等(泛型类、Promise 等定义在外部d.ts里) 其它自定义泛型(通过 JSDoc 标明泛型类型...: React.ReactNode; }> 因为在.js里没有指定泛型参数的类型时,默认为any,所以不报错。...,还有一种自定义的“JavaScript 泛型”: // .js 声明泛型,但不填类型参数 /** @type{Array} */ var x = []; x.push(1); // OK

    2.4K50

    TypeScript基础常用知识点总结

    TypeScript—函数 10. TypeScript—类型推论和类型断言 11. TypeScript—枚举 12. TypeScript—泛型 13....TypeScript增加的功能: 类型批注和编译时类型检查、类型推断、接口、枚举、Mixin、泛型编程、元组、Await、类、模块、lambda 函数的箭头语法、可选参数以及默认参数等。...用数组泛型表示数组 我们也可以使用数组泛型Array 来表示数组: let nums: Array = [1, 1, 2, 3, 5]; 关于泛型,可以下面会具体讲解...当构造函数修饰为 private 时,该类不允许被继承或者实例化。当构造函数修饰为 protected 时,该类只允许被继承。...TypeScript—泛型 泛型是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性。

    4.9K30

    TypeScript 第二章

    在 TypeScript 的第一章中,我们了解了类型注解、类和接口、函数、基本类型和高级类型等基础知识。在本章中,我们将深入学习类型注解的进阶用法、类的继承和多态、泛型、模块和命名空间等高级特性。...最后,我们循环遍历 animals 数组,并使用基类的引用来调用派生类的方法。 泛型 泛型可以帮助我们编写更加通用和灵活的代码。在 TypeScript 中,泛型可以应用于函数、类和接口等场景。...然后,我们分别调用了 reverse 函数,并传递了一个数字类型的数组和一个字符串类型的数组作为参数。 泛型类 泛型类可以帮助我们编写可以适用于多种类型的类。...泛型接口 泛型接口可以帮助我们定义可以适用于多种类型的接口。...以下是一个泛型接口的示例: interface Pair { first: T; } 在这个示例中,我们定义了一个泛型接口 Pair,它有两个类型参数 T 和 U。

    8710

    旧项目TypeScript改造问题与解决方案记

    此时我们需要检查对应的模块是否存在。如果确认模块存在,且终端编译编译时不报错,而只是编辑器报错,则是因为编辑器无法读取webpack配置,我们需要增加另外的配置。...此方法的原理是让TypeScript编译时引用外部的Promise对象,因此在编译时不会报错。此方式优点是不会引入任何其他代码,但是缺点是一定要保证在引用此库的前提下,一定存在Promise对象。...as Session} from '_models/session'; //调整后不报错 export * from '_models/read-item';// 之前不报错不需要调整 ### 泛型定义...: (v: string | number) => void // 参数类型值需要与value一致 } 为了解决这个问题,我们需要用到泛型定义: interface Props引用 当我们使用TypeScript时,经常会出现引用其他模块甚至是JavaScript其他包的情况。

    5K10

    类型体操:探究 TypeScript 内置高级类型

    引入了 泛型,让类型也能成为参数了。...鉴于 JavaScript 太灵活,TypeScript 实现的是结构类型系统,我们又觉得泛型的简单推到 T 的粒度还是不够细,我们希望能够获取 T 内部的结构。...于是,TypeScript 在泛型的基础上,又提供了 类型编程,通过一些语法,我们可以拿到 T 下更细粒度的类型,或通过判断拿到其他类型。 这个也被大家戏称为 类型体操。...总结一下,从类型能力上的增强的过程来说,就是: 基本类型 -> 泛型 -> 类型编程(类型体操) TypeScript 内置高级类型 TS 代码版本为 4.8.2 下面我们来看一下 TypeScript...TypeScript 的类型是图灵完备的,可以实现各种判断、循环、加减的逻辑。当然某些逻辑实现起来很繁琐就是了。 它的语法也是与众不同:它做了 “压缩”。

    86910

    初探 TypeScript函数基本类型泛型接口类内置对象

    在软件工程中,我们不仅要创建一致定义良好的 API,同时也要考虑可重用性,组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能 用泛型来创建可重用的组件...let myIdentity1:{ (arg:T):T} = identity 复制代码 可以使用带有调用签名的对象字面量来定义泛型函数,我们可以将对象字面量拿出来作为一个接口,将一个泛型参数当做整个接口的一个参数...:T):T { return arg } let myIdentity:GenericIdentityFn = identity 复制代码 泛型类 (=>类的学习) 泛型类看上去和泛型接口差不多,泛型类使用...new GeneriNumber() 复制代码 类有两个部分:静态部分和实例部分,泛型类指的实例部分,所以静态属性不能使用这个泛型类型,定义接口来描述约束条件 泛型约束 interface...有时候不同类之间可以有一些共有的特性,这时候就可以把特性提取成接口,用 inplements 关键字来实现,这个特性大大提高了面向对象的灵活性 可选属性的好处:可能存在的属性进行定义,捕获引用了一个不存在的属性时的错误

    7.3K31

    快速了解typescript语法

    其实这本质上还是 ES6 的知识,只是在 ES6 的基础上多上了对 this 字段和引用参数的类型声明。...这在从代码生成 .d.ts 文件时是有帮助的,因为利用这个属性的用户会看到不允许够改变它的值。...可选属性的好处之一是可以对可能存在的属性进行预定义,好处之二是可以捕获引用了不存在的属性时的错误。 interface Person{ name?:string; age?...在像 C# 和 Java 这样的语言中,可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据。这样用户就可以以自己的数据类型来使用组件。...初探泛型 如下代码,我们给 Hello 函数添加了类型变量 T ,T 帮助我们捕获用户传入的类型(比如:string)。我们把这个版本的 Hello 函数叫做泛型,因为它可以适用于多个类型。

    87220
    领券