惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
MongoDB | Blog
MongoDB | Blog
GbyAI
GbyAI
L
LangChain Blog
B
Blog
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
博客园 - 【当耐特】
Recent Announcements
Recent Announcements
P
Proofpoint News Feed
U
Unit 42
Last Week in AI
Last Week in AI
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
雷峰网
雷峰网
Microsoft Security Blog
Microsoft Security Blog
T
The Blog of Author Tim Ferriss
爱范儿
爱范儿
小众软件
小众软件
I
InfoQ
G
Google Developers Blog
大猫的无限游戏
大猫的无限游戏
人人都是产品经理
人人都是产品经理
C
Check Point Blog

TypeScript

Bun 1.4,安卓平板可玩性大提升? - V2EX ts 生态有没有开源的简单的 kv 配置管理项目 你们是怎么学习 typescript 的? 用 Go 移植的 TypeScript 7 要来了 TypeScript5.9,仿佛走出草原来到了现代社会 Typescript 有没有能对接 AI 的知识库或者文档?能处理稍微复杂点的类型 typescript 如何返回一个动态对象类型 ts 有没有直接能查看最终类型的方法 TypeScript Native 预览版发布了 关于 TypeScript 装饰器和接口的问题,请教一下各位 你们 typescript 用自带枚举还是字符串枚举,感觉字符串枚举类型用起来有点不可靠啊 effect-ts typescript 达人乱入 TypeScript 宣布原生移植计划,性能将提升 10 倍? #笔记#更好的 ts 重载声明方法 使用 satisfies 实现穷举类型保护 请教一个 TS 问题,不知能否实现 装饰器能不能装饰类的所有方法 TypeSciprt 类型推断,如何进一步收窄类型? TypeScript 项目打包发布到 npm,如何给方法和接口添加 dts TypeScript 类型推导真强大。 为啥下面这段代码 TS 不报错 ts 类型约束+请求参数校验+自动生成 openapi/swagger 文档,这三者目前有整合为一体的最佳实践吗 TypeScript 能不能别这么古怪,这行为什么会报错呢? 怎么每次碰到想不通的代码行都出在 TypeScript😢 这行到底哪里有问题? 低估了 typescript 的难度 前端写 nestjs 后端,用 TypeORM 时感到非常困惑,不知道是不是我的理解有问题 我列举了市面上最好的几个 TypeScript 教程, 想深入学习 TypeScript 的同学以后不用走弯路了 这样的函数类型定义在 ts 里面叫什么? typescript 如何忽略泛型参数啊?
[求助] 函数中使用泛型缩小参数类型
lqzhgood · 2023-09-06 · via TypeScript

我有一个 Map ,一一对应。

TAP_TYPE.LOCAL 对应 TAP_LOCAL,

TAP_TYPE.MAP 对应 TAP_MAP

我在函数中已经通过 switch 约束 test 的 v, 为什么 ts 还是推导 v 的类型是 TAP_LOCAL | TAP_MAP

或者对这样的例子,除了对 v 进行强制断言,有什么更好的写法吗?

enum TAP_TYPE {
    'LOCAL',
    'MAP',
}

interface TAP_LOCAL {
    a: string;
}

interface TAP_MAP {
    b: string;
}

type TapTypeMap = {
    [TAP_TYPE.LOCAL]: TAP_LOCAL;
    [TAP_TYPE.MAP]: TAP_MAP;
};

function test<T extends TAP_TYPE>(t: T, v: TapTypeMap[T]) {
    switch (t) {
        case TAP_TYPE.LOCAL:
            return v.a;  // 类型错误  类型“TAP_LOCAL | TAP_MAP”上不存在属性“a”。
        case TAP_TYPE.MAP:
            return v.b;  // 类型错误  类型“TAP_LOCAL | TAP_MAP”上不存在属性“b”。
    }
}