一些 TS 的常见问题
2A5F 7月8日 18 2 0 18 2 0

不定期持续记录一些常见的问题

  • 判断字段是否存在

    在 js 中很多人喜欢直接

    if (a.b) { a.b }
    

    在某个字段不存在时直接获取时默认值是 undefined,然后隐式转换成 boolean

    这在 ts 中是不行的
    需要使用

    if ('b' in a) { a.b }
    
  • 对象解构时的类型

    正确的做法是

    const { a }: { a: T } = foo
    

    如果你在尝试

    const { a: T } = foo
    

    那么你肯定不了解解构其实还有个别名语法

    const { a: alias } = foo
    alias // 是个变量,替换了 a,此时就不能使用 a 了
    
  • 我想要 传递/替换/保存/返回 一个 类型/类型构造器(函型)

    如果你在试图干下面的某一件事或者类似的事

    type foo = Parameters<<T>(v: T) => T>
    function bar<T>(...args: foo<T>): T
    
    interface Foo<V> {}
    function map<T extends Foo, R>(f: (v: T) => R): Foo<R>
    
    interface Foo { t: type }
    const a: Foo = { t: number }
    const b: Foo = { t: stinrg }
    
    type Foo = <T>{ v: T }
    
    type Foo<...T> = <...T>() => void
    

    那么很遗憾的告诉你
    现在的 ts 还不支持这些做法

扫码分享到移动端
0 条评论
快来写一写读后感吧~
参与评论互动
登录即可参与评论互动哦