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

Typescript 中的泛型为什么要用<T>、<U>..等符号,是什么的简写吗?

  •  
  •   think2011 · 2017-11-26 21:33:31 +08:00 · 10868 次点击
    这是一个创建于 2558 天前的主题,其中的信息可能已经有所发展或是发生改变。
    27 条回复    2017-11-28 22:34:16 +08:00
    kfll
        1
    kfll  
       2017-11-26 23:20:36 +08:00
    T: type
    U: 在字母表中处于 T 下一位

    猜测。
    lihongjie0209
        2
    lihongjie0209  
       2017-11-26 23:28:56 +08:00
    当你在前端遇到任何不理解的问题去后端找找就清楚了, 毕竟都是借鉴(chao)后端的
    lrz0lrz
        3
    lrz0lrz  
       2017-11-26 23:41:49 +08:00
    @lihongjie0209 那么后端为什么要这样做呢?
    think2011
        4
    think2011  
    OP
       2017-11-26 23:57:59 +08:00
    @lihongjie0209 求后端指导
    hanai
        5
    hanai  
       2017-11-27 00:02:50 +08:00   ❤️ 2
    @kfll 说的对,看 https://docs.oracle.com/javase/tutorial/java/generics/types.html 的 Type Parameter Naming Conventions 部分
    SuperMild
        6
    SuperMild  
       2017-11-27 00:07:42 +08:00
    说沿用 Java 也对,但其实根据英语习惯和编程习惯,也很容易做出这样的设定,比如用了变量 i,那还需要一个临时变量时就会按顺序用 j,k
    AngelCriss
        7
    AngelCriss  
       2017-11-27 00:11:04 +08:00 via Android
    template<typename F, typename Arg>

        struct is_type_match

        {

          private:

            template<typename Func> struct extract;


            template<typename R, typename A>

            struct extract<R(A)>

            {

              using ires = R;

              using iarg = A;

            };


            template<typename R, typename A>

            struct extract<R(*)(A)> : extract<R(A)> {};


            template<typename R, typename A>

            struct extract<std::function<R(A)>> : extract<R(A)> {};


            template<typename R, typename Class, typename A>

            struct extract<R(Class::*)(A)> : extract<R(A)> {};


            template<typename R, typename Class, typename A>

            struct extract<R(Class::*)(A) const> : extract<R(A)> {};


            template<typename R, typename Class, typename A>

            struct extract<R(Class::*)(A) volatile> : extract<R(A)> {};


            template<typename R, typename Class, typename A>

            struct extract<R(Class::*)(A) const volatile> : extract<R(A)> {};


            template<typename lambda>

            struct extract : extract<decltype(&lambda::operator())> {};


            template<typename lambda>

            struct extract<lambda&> : extract<decltype(&lambda::operator())> {};


            template<typename lambda>

            struct extract<lambda&&> : extract<lambda&> {};

          public:

            using arg = typename std::remove_cv<

              typename std::remove_reference<Arg>::type>::type;

            using iarg = typename std::remove_cv<

              typename std::remove_reference<typename extract<F>::iarg>::type>::type;

            constexpr static bool arg_same = std::is_same<arg, iarg>::value;

        };

    -------------------
    比如这里面 F 代表 function,A,Arg 代表参数,R 代表返回值,Class 代表类,lambda 代表匿名类。。
    geelaw
        8
    geelaw  
       2017-11-27 00:13:07 +08:00
    其实我的习惯是 T1, T2, TIt, TForwardIt, ...TArgs, TFunc, TPred, TKey, TValue
    sunjourney
        9
    sunjourney  
       2017-11-27 00:22:59 +08:00 via iPhone
    @lihongjie0209 Typescript 作者是 C# 的作者,你说是抄?井底之蛙
    kojirou
        10
    kojirou  
       2017-11-27 00:24:21 +08:00
    爱用什么用什么。。
    Gonejack
        11
    Gonejack  
       2017-11-27 00:36:00 +08:00 via iPhone
    这东西随便定,Java 里还有 K V 表示 key value,T R 表示参数和返回
    FaiChou
        12
    FaiChou  
       2017-11-27 09:29:06 +08:00
    swift 中大多也是 T, U, V, Element...
    overflowHidden
        13
    overflowHidden  
       2017-11-27 09:30:15 +08:00
    @sunjourney 官方借鉴就是名正言顺地抄袭而已啊
    think2011
        14
    think2011  
    OP
       2017-11-27 10:08:10 +08:00   ❤️ 1
    E - Element (used extensively by the Java Collections Framework)
    K - Key
    N - Number
    T - Type
    V - Value
    S,U,V etc. - 2nd, 3rd, 4th types

    @hanai 找到啦

    谢谢各位!
    KuroNekoFan
        15
    KuroNekoFan  
       2017-11-27 10:27:49 +08:00
    看一下 java 基础就知道了
    sunjourney
        16
    sunjourney  
       2017-11-27 10:50:38 +08:00
    @overflowHidden #13 您脑回路特别清奇,自己抄自己?
    overflowHidden
        17
    overflowHidden  
       2017-11-27 10:57:12 +08:00
    @sunjourney 我这说的抄袭是照搬的意思,因为搬得太生硬
    sunjourney
        18
    sunjourney  
       2017-11-27 10:57:45 +08:00
    @overflowHidden #13 而且泛型很多语言都有,把类、接口、枚举、全拿掉好了
    sunjourney
        19
    sunjourney  
       2017-11-27 11:03:55 +08:00
    @overflowHidden #17 用 T,U 是照搬还是 TypeScript 有泛型是照搬?官方文档里举的例子用 T, U 是因为是要在举例抽象的例子,swift, haskell 都是这么用,就不生硬了?实际项目都是和语义关联的,想用什么就用什么。
    bramblex
        20
    bramblex  
       2017-11-27 11:12:04 +08:00
    @lihongjie0209

    这东西关后端屁事?

    别说那群写 java / php 的, 你就写 c++ 后端的, 模板折腾懂了吗?
    HowToMakeLove
        21
    HowToMakeLove  
       2017-11-27 11:15:51 +08:00
    占变量类型的位啊,你可以随意起名
    bramblex
        22
    bramblex  
       2017-11-27 11:21:34 +08:00   ❤️ 1
    如果你能把类型系统单独拿出来理解, 当成一个独立的语言, 类型进行独立的计算.

    类型有值, 有变量, 有函数, 有运算符.

    那你就能理解一切语言的类型系统了. typescript 这种已经算最简单的了
    momocraft
        23
    momocraft  
       2017-11-27 11:34:39 +08:00
    感觉在非常泛的 (想不到更具体名字的) 型上用 T U 比较多。有较具体的背景时也可以用 E (lement) / Req / Res 等。
    mooncakejs
        24
    mooncakejs  
       2017-11-27 11:57:35 +08:00
    随便用的,一般还有 P TPUEK
    bombless
        25
    bombless  
       2017-11-27 12:50:55 +08:00 via Android
    一般就是 t 是类型,多出一个类型变量就用下一个就是 u,再不行就 v,w 啥的。
    不过分析里面一些人习惯用 u 和 v 做二元函数的参数名,所以经常是直接就用 u 和 v 了。
    挺多玩类型的人数学素养还是不错的,就用上了数学中的习惯,也有一些人纯粹是模仿其他人的习惯这样大家都看的舒服
    AngelCriss
        26
    AngelCriss  
       2017-11-27 18:12:21 +08:00 via Android
    @bramblex 活捉 jiji 的思念
    qsnow6
        27
    qsnow6  
       2017-11-28 22:34:16 +08:00
    js 是一门进化出来的语言,基本上就是缺啥了,就从别的成熟的语言搬点过来。所以现在撸点 JS 代码比以前要方便得多了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2702 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 15:38 · PVG 23:38 · LAX 07:38 · JFK 10:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.