首页
学习
活动
专区
圈层
工具
发布

TS 小技巧: 使用元组生成联合类型

这里向大家介绍一个开发小技巧:使用元组生成联合类型 开发场景 我们看下面一段 ts 代码: const colors = ['red','green','orange','blue']; // 这里 ts...value) }; 我们总不能手动去写成这样: type Colors = 'red' | 'green' | 'orange' | 'blue'; 这样显得我们很呆,我们应该根据 colors 自动生成一个联合类型...先将 colors 转成元组类型,这里 ts 解析的是 readonly ["red", "green", "orange", "blue"] const colors = ['red','green'...将元组类型转成联合类型 type Colors = typeof colors[number]; // 这里的 value 类型该如何标注,使它的值只能是 colors 中的值 const setColors...= (value:Colors) => { console.log('value',value) }; 这样我们就可以完成 ts 的类型检查了:

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

    自动为PostgreSQL数据库生成类型

    SQL 不是类型安全的。 1.“我没时间学习 SQL。” 这是主观的,无法争论。如果你太忙而无法学习新事物,我完全理解。 2.“我不想学习 SQL。”...无论如何,如果你决定采用“原始 SQL”路线并且需要类型,这里有几个选项供你选择。 自动类型生成 我试验了两种解决方案:kysely-codegen 和 pg-to-ts。...如何使用 kysely-codegen kysely-codegen 从你的数据库生成 Kysely 类型定义。就是这样。 Kysely 安装 运行以下命令安装 Kysely 主程序包。...Kysely 生成 您现在可以运行以下脚本,您应该会在项目的根目录中看到一个新的 .d.ts 文件,其中包含数据库中所有表和列的所有类型。...类型化查询 以下是我在 PostgreSQL 查询中使用生成类型的示例,但这些类型定义也可以用作组件的 props 接口的一部分。

    40310

    Flutter Web - 让 Web 与 APP UI 一致的另一种可能

    那其实通信层上就需要做到双端无感,这很容易想到使用 codegen 的方式(codegen 会单独开一个专栏来聊一聊)。...在研究了该库的 example https://github.com/google/chartjs.dart/ (google 组织下,也是很有保证的)后发现了一个官方使用的 codegen 生成 chartjs.dart...《https://github.com/dart-lang/js_facade_gen[2] 》根据 TS 代码生成 dart 抽象调用层。...在研究了它的源码后,发现其实也还是对 TS 的 AST 进行字符串处理(codegen 的本质就是字符串处理) 那我们就可以改造源码的方式进行本地使用。...例如去支持生成 Flutter 空安全语法: 也做了不少增强性工作,原因是这两点: 经过验证,虽然 Flutter 调用 JS 没问题,但 JS 对象返回后在 Flutter 上无法被解析,而且在 dart2js

    2K10

    深入理解 Vue 模板渲染:Vue 模板反编译

    生成器将 vue 模板语法树转换成 vue 模板字符串。 解析器 其中解析器属于比较大众化的需求,eslint、压缩/优化、代码高亮、类型检查等等都需要用到解析器,自然可以找到可用的轮子。...完整的 js 语法树节点类型定义可以在 ts-estree.ts[2] 查阅。 简单的 api 调用就可以获取到渲染函数的语法树。...一个 vue 模板语法树节点类型定义如下: 删减了非必要属性,完整版本可以查看 index.d.ts[3] type ASTNode = ASTElement | ASTText | ASTExpression...完整的内置方法列表可以查阅 vue/render-helpers[4],其生成逻辑在 vue/codegen[5] vue/codegen[6] 可以认为是 vue 模板的生成规范。...部分不常用的属性对象未列出,可以查阅 vue/codegen[7] 优化 经过以上处理,我们已经得到了 vue 模板语法树,但是它还有冗余。有 _e 生成的空节点,还可能有 wrap 节点多层嵌套。

    7.4K43

    中台框架模块开发实践-代码生成器的添加及使用

    将生成器代码复制到 views 中 执行:npm run gen:api 重新生成接口映射,会把后端接口转为前台可以直接调用的 ts 代码 个人建议:可以根据模块独立一个文件,添加模块生成 gen-module.js...,就只会重新生成模块文件 运行项目:npm run dev 使用 admin 123asd 即可登录到系统 配置菜单 代码生成器的代码添加了,但是目前还无法再页面中显示出来,有两三种做法 第一种:可以直接修改.../src/router/route.ts 将下面的路由配置添加到参考样例的路由中,只能在开发时使用 { path: '/dev', name: 'dev',...','代码生成','dev/codegen/index',NULL,0,1,1,161223411986501,'admin','管理员','2024-06-16 16:08:49',NULL,NULL...) 第四步:因为是模块的第一个服务,所以需要先在权限管理中创建一个【家常管理】的分组,这里的名字和代码生成器中填写的父菜单需要一致,否则无法生成菜单 这里可以重定向的路由地址由后续生成,默认列表页以

    51610

    听GPT 讲Rust源代码--compiler(46)

    codegen_attrs.rs会解析这个属性并将其应用于代码生成阶段。 "#[repr(C)]"属性:这个属性告诉编译器以C语言的规则对结构体或枚举类型进行布局。...然而,当需要与C语言进行交互时,通常需要使用#[repr(C)]属性来确保Rust类型与C语言类型具有相同的内存布局。codegen_attrs.rs会解析这个属性并相应地影响代码生成过程。...UnableToExeLinker, MsvcMissingLinker: 表示无法执行链接器或缺失MSVC链接器的错误。...UnableToRun: 表示无法运行的错误。 LinkerFileStem: 表示链接器文件命名错误的错误。...枚举: ModuleKind:这个枚举表示模块的类型,例如主模块、库模块等。 CodegenErrors:这个枚举表示代码生成过程中可能出现的错误,如无法找到符号、无效指令等。

    45810

    Codegen技术学习

    从上图中可以看除,spark通过Codegen在运行前将逻辑计划生成对应的机器执行代码,由Tungsten backend执行。...原理 从上图中可以看除,spark通过Codegen在运行前将逻辑计划生成对应的机器执行代码,由Tungsten backend执行。...更因为如此,内联函数这个最常见的性能优化方式也无法被使用。...那么使用Codegen的好处如下: 其一是简化了条件分支,因为在生成代码的时候,程序已经获知运行时的信息,通过展开for循环(因为我们已经知道循环次数)和解析数据类型,所以可以将if/switch这些分支指令这样的语句就能优化掉...其三是内联虚函数的调用,因此当对象实例的类型在运行时可知,可以使用代码生成来取代虚函数的调用,并做内联化,这样表达式可以无需函数调用而直接求值。

    3K50

    React Native 新架构

    这些消息队列是异步的,无法保证处理事件。 序列化。通过JSON格式来传递消息,每次都要经历序列化和反序列化,开销很大。 批处理。对Native调用进行排队,批量处理。...在两端无法避免的情况下,尽量通信减少次数。比如多个请求合并成一个。 较少JSON的大小。比如图片转为Base64会导致传输数据变大,用网络图片代替。...主要有JSI、Fabric、TurboModules、CodeGen、LeanCode组成。 JSI JSI是整个架构的核心和基石,所有的一切都是建立在它上面。...CodeGen 通过CodeGen,自动将Flow或者Ts等有静态类型的JS代码翻译成Fabric和TurboModules使用的原生代码。...具体的进度可以参考Fabric进度讨论和 TurboModules进度讨论和JSI进度讨论和CodeGen进度讨论,以及React官方源码 目前RN的新架构正在紧张的重构中,比预定的时间表晚了一点,比较期待新框架的发布和表现

    2.1K21
    领券