V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
l1nyanm1ng
V2EX  ›  JavaScript

在 redux 中使用 TypeScript 怎么让字符串字面量类型参数化

  •  
  •   l1nyanm1ng · 2019-05-06 14:04:37 +08:00 · 2841 次点击
    这是一个创建于 2028 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原本使用 redux 时,会让每一个 action 的 type 定义为一个常量,之后再引用。现在切换到 TypeScript 上反而不明白怎么定义 type 是固定字符串的类型,不是直接字面量写的,而是通过参数化引用的。

    这里贴上我暂时的解决方法,只是写死成字面量,真的希望找到参数化的写法。

    5 条回复    2019-05-06 14:59:09 +08:00
    wly19960911
        1
    wly19960911  
       2019-05-06 14:18:47 +08:00
    枚举,枚举自身可以作为类型,只允许接受枚举的值。
    wly19960911
        2
    wly19960911  
       2019-05-06 14:25:52 +08:00
    另外一种形式是联合类型。

    比如 type CountAction = "SET_COUNT" | "SET_COLLAPSED"; 这种类型下虽然是字符串,但是只允许某个字符串。配合枚举更好。

    又比如,

    enum CountAction {
    SET_COUNT = "SET_COUNT",
    CLEAR_COUNT = "CLEAR_COUNT"
    }

    enum AccountAction {
    SET_ACCOUNT_STAT = "SET_ACCOUNT_STAT"
    }

    type MyReduxAction = CountAction | AccountAction;

    然后定义只能调用 MyReduxAction,以上是我纯理论的,我不是写 react 和 redux 的,只懂原理。
    wly19960911
        3
    wly19960911  
       2019-05-06 14:29:18 +08:00   ❤️ 1
    @wly19960911 #2 定义只能调用 MyReduxAction,这个说错了,是只能传递这个类型的,不是调用....
    GiantHard
        4
    GiantHard  
       2019-05-06 14:46:52 +08:00   ❤️ 1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2572 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 10:44 · PVG 18:44 · LAX 02:44 · JFK 05:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.