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

从 0 到 1 搭建一个企业级前端开发规范

意味着可以在编码阶段发现存在的隐患,而不用把隐患带到线上去 TypeScript 会包括来自 ES6 和未来提案中的特性,比如异步操作和装饰器,也会从其他语言借鉴特性,比如接口和抽象类 TypeScript...:使用哪种模块解析策略.参考文档 resolveJsonModule:是否可以导入 JSON 模块.参考文档 isolatedModules:每个文件必须是模块.参考文档 noEmit:不生成输出文件...关闭了explicit-module-boundary-types,Typescript 中,必须明确指定函数的返回值类型。...return 1; }; TS 中可以通过类型推断判断出函数的返回值类型,因此可以关闭此 Lint 添加 NPM 脚本 { "script": { "lint-staged:js": "...这会生成一个.eslintcache文件用来缓存已校验过的文件 lint:fix: 根据 .eslintcache文件,校验被修改过的文件。

2.9K20

什么是鸭子🦆类型?

所以,我们在处理异常的时必须更加谨慎,所以在 JavaScript 和 TypeScript 中我们要做这样的判断可能有点逆向思维。...,我们做了下面几个判断: 检查参数 value 是不是为空 检查参数 value 是否为 object 类型 通过 Reflect.get 方法更安全安全地判断 quack 是不是一个函数 你可能对这种代码再熟悉不过了...TypeScript 解析器,它可能是只鸭子也可能是只猫,你需要再函数体的逻辑中再做进一步判断。...但是,解析器可能没我们想象中的那么聪明,这里会报错,因为他还是不能确定 value 到底是只鸭子还是只猫,所以无法确定 quack 函数是不是存在。...小技巧 - 通用类型保护 上面的判断可能在我们的代码中是个很常见的用法,如果我们需要判断的类型有很多,为每个类型都实现一个这样的类型保护函数还挺麻烦的,所以我们可以稍微做个变形来封装一个更通用的类型保护函数

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

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

    无法使用 __dirname, __filename,require 这些全局的变量或方法 因此在 4.7 版本,TypeScript 也将会读取这一配置字段来决定是否将文件作为 ESM 解析,以及如何查找这一文件导入的模块...TypeScript 能够从 produce 函数的返回值推导出泛型参数 T 的类型,并应用到 consume 函数的入参类型中。...而在第二、第三个,produce 函数的返回值类型没有从其内部推导得到,仍然是默认的 unknown 类型。...= asFEEngineer; const asInfra = asFEEngineer; 每一个函数除了泛型参数已固定以外,和原本的函数完全一致: const...在过去,我们只能通过已经确定的固定规律来判断协变与逆变分别在哪种情境下发生(参数逆变,返回值协变,部分内置方法双变(Bivariant),接口内部使用 property 方式定义的函数执行严格的协变与逆变检查

    5.9K30

    JS不靠谱系列: 写一个验证过期时间的函数,包含jest单元测试

    判断参数的类型,只考虑两种情况 数字: 验证是否为一个正确的时间戳!!!!...true; } else { // 否则返回false,从外部调用这个函数拿到返回值, // 做二步处理,续期还是强制退出什么鬼的 return false; } }.../** * @description 判断是否为正确的日期 * @param {*} d */ export const isDate = d => { // 任何不能给Date识别的参数,子函数调用的返回值为.../ 否则返回false,从外部调用这个函数拿到返回值, // 做二步处理,续期还是强制退出什么鬼的 return false; } } /** * @description 判断是否为正确的日期.../src/utils/isDate"; describe("isDate函数测试集合组", () => { test("這種非標準的時間戳只會轉成1970這種,已經過期", () => {

    2.1K20

    手撕钉钉前端面试题

    其中大部分面试题可能会已文章链接的形式出现,或许是我自己以前写过的文章,或者是我觉得别人写的不错的文章。...函数式编程的核心就是对函数进行组合或传递,JavaScript 中函数这种灵活的特性是满足函数式编程的重要条件。 纯函数 纯函数是是指在相同的参数调用下,函数的返回值唯一不变。...,而在纯函数中则说明了函数式编程不能依赖外部的环境或状态,因为一旦依赖的状态变化,不能保证函数根据对应关系所计算的返回值因为状态的变化仍然保持不变。...: 使用者的回调函数设计没有进行错误捕获,而恰恰三方库进行了错误捕获却没有抛出错误处理信息,此时使用者很难感知到自己设计的回调函数是否有错误 使用者难以感知到三方库的回调时机和回调次数,这个回调函数执行的权利控制在三方库手中...- TypeScript 语法 - 模板解析 ### 数据结构 #### 171、使用 TypeScript 语法将没有层级的扁平数据转换成树形结构的数据 ```javascript

    3K21

    TS - as vs is

    is 是 TypeScript 中用于类型断言的关键字,它用于在运行时对值的类型进行判断。通过使用 is,你可以编写自定义的类型保护函数,帮助 TypeScript 编译器理解代码中变量的类型。...是否为 ExpectedType 类型的值 // 返回值为布尔类型,指示 variable 是否为 ExpectedType 类型 } 使用案例 假设我们有一个 User 类型和一个 isAdmin...函数,用于判断用户是否为管理员。...但由于网络请求的不确定性,TypeScript 编译器无法准确地推断出获取的数据的类型。在这种情况下,我们可以使用 as 进行类型断言,告诉 TypeScript 编译器将获取的数据视为特定的类型。...is 类型守卫 is 类型守卫是TypeScript中用于类型检查的语法。它通常与函数一起使用,用于在运行时检查一个值是否符合某个特定的类型。

    14510

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

    需要注意的是,类型断言只能够「欺骗」TypeScript 编译器,无法避免运行时的错误,反而滥用类型断言可能会导致运行时错误: interface Cat { name: string;...isApiError,它用来判断传入的参数是不是 ApiError 类型,为了实现这样一个函数,它的参数的类型肯定得是比较抽象的父类 Error,这样的话这个函数就能接受 Error 或它的子类作为参数了...,能够通过 instanceof 来判断 error 是否是它的实例。...此时就只能用类型断言,通过判断是否存在 code 属性,来判断传入的参数是不是 ApiError 了: interface ApiError extends Error { code: number...类型系统的限制而无法精确定义类型的场景。

    1.3K20

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

    如果不是 string 子类,编译无法通过。 还有一种是 extends ? : 的类似 JS 中三元运算符的语法,它在等号的右侧,用于实现条件判断。...为了更好的讲解,我们实现一个类型 IsNumber,判断一个类型是否为数值类型。 type IsNumber = T extends number ?...回到我们的 Exclude,逻辑就很清楚了,就是判断 T 是否为 U 的子类,如果是的话,返回 never(效果是被丢弃);否则返回 T。...ReturnType 获取函数类型的返回值类型。...如果 extends 条件判断是继承关系,那么变量 R 就会被赋值函数的返回值。 后面的判断为真的分支(? 后面的表达式)就能拿到这个 R。判断为假的分支就无法拿到,因为匹配失败了。

    86910

    Jest:给你的 React 项目加上单元测试

    注释和文档容易忘记修改,但测试用例的描述永远是准确的,因为不对就无法通过测试; 可测试性好的代码,往往可维护性更好。...test 方法创建了一个测试的作用域,该方法有三个参数: 测试的描述。 我们写测试代码的函数。 测试超时时间,默认为 5 秒,有些测试是异步的,我们需要等待。...; toContain:数组中是否含有某个元素; toBeLessThan:是否小于某个值,可以做性能测试,执行某个函数几千次,时间不能高于某个值。...异步测试 如果使用异步测试,需要将 Promise 作为返回值。...,你需要调用函数传入的 done 函数来表明测试完成: test('异步测试', done => { setTimeout(() => { expect('前端西瓜哥').toBeTruthy

    2.9K20

    获取URL参数的最佳实践:兼容Hash模式的TypeScript实现

    为了确保在各种模式下都能准确获取参数,本文将介绍一个兼容Hash模式的TypeScript函数getUrlQuery,并详细解析其实现原理及使用方法。...代码详解 让我们逐行解析这个函数的工作原理: 函数签名与注释 函数通过TypeScript定义,接受一个字符串类型的参数key,返回类型为string | null。...函数顶部的注释使用了JSDoc风格,清晰地描述了函数的用途、参数、返回值以及使用示例,有助于提升代码的可读性和可维护性。...key=value的格式中提取查询字符串。 容错处理:如果以上两种方式都无法获取到查询字符串,默认传递一个空字符串''给URLSearchParams,避免出现错误。...decodeURIComponent(value) : null 存在检查:首先检查value是否为null。

    11300

    淘宝店铺 TypeScript 研发规约落地实践|技术详解

    类型守卫 其实,更理想的做法是使用类型守卫,通过实际层面的逻辑判断,比如是否包含某个字段,某个字段是否是正确类型,结合 TypeScript 的 is 关键字来在实际使用时去精确地收窄类型。...接着是专注 TypeScript 类型书写的部分,比如不允许使用空对象或顶级对象 Function Object 来作为类型注释,函数需要显式的声明返回值,这是为了清晰地判断一个函数是否有副作用,以及泛型参数...另外一个从代码层面,也是我个人比较推荐的,对于函数、类方法这些能自动推导返回值的代码,显式地标注这些返回值,一方面这在编译器层面能减少掉许多推导成本,另一方面,也让我们能够清晰地判断这个函数的作用。...首先来解释一下什么叫基于 Compiler API 的源码级约束,ESLint 大家都知道基本的作用和工作原理,也就是解析成符合 estree 标准的 AST,然后去检查这个 AST,比如那条要求函数显式标注返回值的规则...,就是先解析成 AST,然后检查函数返回值的类型节点,也就是 TypeNode 是否存在。

    1.1K20

    实现TypeScript运行时类型检查

    -- 组合子.组合子, 顾名思义, 就是对某种抽象的组合操作, 在本文中, 特指为对解析器的组合操作.如上是示例所示, 在TypeScript 中, 我们也是经常使用"组合" 的方式组合类型:type..., 且具有短路(short circuit)的特性.在Promise.then中, 这个上下文既是"有可能成功的异步返回值".得力于这种抽象, 我们可以摆脱call back hell和对状态的手动断言...;从类型推断实现是函数式编程的经典做法, 我们不妨根据上述类型推断下fromArray的实现.fromArray的返回值是Parser, 与此同时我们有参数...[]>作为最终Parser的返回值.这个类型转换具有通用性, 是函数式编程中的一个重要抽象, 在本节中会化一些篇幅对其推导, 最终将改抽象对应到Haskell 的sequenceA函数.为了Either....但实际上, io-ts真实的实现运用了更多的设计, 比如tag less final, 报错类型也使用了其他的代数数据类型(ADT)等, 覆盖面之广, 是仅仅一篇博客无法讲完的.有兴趣的读者推荐这篇教程

    2.5K30

    一杯喜茶的时间手搓Promise

    只有异步操作可改变Promise的状态,其他操作都无法改变。...使用Promise 上述已说到,Promise是一个对象,那么它肯定是由其构造函数来创建。其构造函数接受一个函数作为参数,其函数的参数有2个,分别是resolve和reject。...❞ 到这里已实现了基本的代码,但是异步时会出现问题。...then()的返回值,以决定then()向下传递的状态走resolve还是reject,实现思路: nextPromise与x不能相等,否则会一直调用自己 判断x的类型,如果不是函数或对象,直接resolve...(x) 判断x是否拥有then(),并且如果then()是一个函数,那么就可执行x的then(),并且带有成功与失败的回调 flag的作用是执行x的then()时成功与失败只能调用一次 执行x的then

    77240

    《现代Javascript高级教程》JavaScript中的Generator函数

    现代JavaScript高级小册 深入浅出Dart 现代TypeScript高级小册 JavaScript中的Generator函数与其在实现Async/Await的应用 在JavaScript的世界里...value属性是yield语句后面的值,done属性表示函数是否执行完成。 这种暂停执行的特性使得Generator函数能够以一种完全不同的方式来编写和理解代码,尤其是在处理复杂的异步逻辑时。 2....Generator函数与异步操作 Generator函数的真正威力在于它能以同步的方式来编写异步代码。通过使用yield关键字,我们可以暂停函数的执行,等待异步操作完成,然后再继续执行。...这是一个异步操作,但是使用yield关键字,我们可以将其转化为一个同步操作。网络请求完成后,我们获取响应并解析为JSON。...如果Generator函数已经执行完毕,它将返回一个解析为最后返回值的Promise;如果Generator函数还未执行完毕,它将处理当前的Promise,等待Promise解析完成后再次调用handle

    21720
    领券