推荐关注
› Meteor
› JSLint - a JavaScript code quality tool
› jsFiddle
› D3.js
› WebStorm
推荐书目
› JavaScript 权威指南第 5 版
› Closure: The Definitive Guide
think2011

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

  •  
  •   think2011 · Nov 26, 2017 · 12143 views
    This topic created in 3264 days ago, the information mentioned may be changed or developed.
    27 replies  •  2017-11-28 22:34:16 +08:00
    kfll
    kfll
    Nov 26, 2017
    1
    T: type
    U: 在字母表中处于 T 下一位

    猜测。
    lihongjie0209
    lihongjie0209
    Nov 26, 2017
    2
    当你在前端遇到任何不理解的问题去后端找找就清楚了, 毕竟都是借鉴(chao)后端的
    lrz0lrz
    lrz0lrz
    Nov 26, 2017
    3
    @lihongjie0209 那么后端为什么要这样做呢?
    think2011
    think2011
    OP
    Nov 26, 2017
    4
    @lihongjie0209 求后端指导
    hanai
    hanai
    Nov 27, 2017❤️2
    5
    @kfll 说的对,看 https://docs.oracle.com/javase/tutorial/java/generics/types.html 的 Type Parameter Naming Conventions 部分
    SuperMild
    SuperMild
    Nov 27, 2017
    6
    说沿用 Java 也对,但其实根据英语习惯和编程习惯,也很容易做出这样的设定,比如用了变量 i,那还需要一个临时变量时就会按顺序用 j,k
    AngelCriss
    AngelCriss
    Nov 27, 2017 via Android
    7
    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
    geelaw
    Nov 27, 2017
    8
    其实我的习惯是 T1, T2, TIt, TForwardIt, ...TArgs, TFunc, TPred, TKey, TValue
    sunjourney
    sunjourney
    Nov 27, 2017 via iPhone
    9
    @lihongjie0209 Typescript 作者是 C# 的作者,你说是抄?井底之蛙
    kojirou
    kojirou
    Nov 27, 2017
    10
    爱用什么用什么。。
    Gonejack
    Gonejack
    Nov 27, 2017 via iPhone
    11
    这东西随便定,Java 里还有 K V 表示 key value,T R 表示参数和返回
    ethusdt
    ethusdt
    Nov 27, 2017
    12
    swift 中大多也是 T, U, V, Element...
    overflowHidden
    overflowHidden
    Nov 27, 2017
    13
    @sunjourney 官方借鉴就是名正言顺地抄袭而已啊
    think2011
    think2011
    OP
    Nov 27, 2017❤️1
    14
    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
    KuroNekoFan
    Nov 27, 2017
    15
    看一下 java 基础就知道了
    sunjourney
    sunjourney
    Nov 27, 2017
    16
    @overflowHidden #13 您脑回路特别清奇,自己抄自己?
    overflowHidden
    overflowHidden
    Nov 27, 2017
    17
    @sunjourney 我这说的抄袭是照搬的意思,因为搬得太生硬
    sunjourney
    sunjourney
    Nov 27, 2017
    18
    @overflowHidden #13 而且泛型很多语言都有,把类、接口、枚举、全拿掉好了
    sunjourney
    sunjourney
    Nov 27, 2017
    19
    @overflowHidden #17 用 T,U 是照搬还是 TypeScript 有泛型是照搬?官方文档里举的例子用 T, U 是因为是要在举例抽象的例子,swift, haskell 都是这么用,就不生硬了?实际项目都是和语义关联的,想用什么就用什么。
    bramblex
    bramblex
    Nov 27, 2017
    20
    @lihongjie0209

    这东西关后端屁事?

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

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

    那你就能理解一切语言的类型系统了. typescript 这种已经算最简单的了
    momocraft
    momocraft
    Nov 27, 2017
    23
    感觉在非常泛的 (想不到更具体名字的) 型上用 T U 比较多。有较具体的背景时也可以用 E (lement) / Req / Res 等。
    mooncakejs
    mooncakejs
    Nov 27, 2017
    24
    随便用的,一般还有 P TPUEK
    bombless
    bombless
    Nov 27, 2017 via Android
    25
    一般就是 t 是类型,多出一个类型变量就用下一个就是 u,再不行就 v,w 啥的。
    不过分析里面一些人习惯用 u 和 v 做二元函数的参数名,所以经常是直接就用 u 和 v 了。
    挺多玩类型的人数学素养还是不错的,就用上了数学中的习惯,也有一些人纯粹是模仿其他人的习惯这样大家都看的舒服
    AngelCriss
    AngelCriss
    Nov 27, 2017 via Android
    26
    @bramblex 活捉 jiji 的思念
    qsnow6
    qsnow6
    Nov 28, 2017
    27
    js 是一门进化出来的语言,基本上就是缺啥了,就从别的成熟的语言搬点过来。所以现在撸点 JS 代码比以前要方便得多了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1385 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 22:46 · PVG 06:46 · LAX 14:46 · JFK 17:46
    ♥ Do have faith in what you're doing.