• .Alter
    2019-09-16
    老师,我在最新版本的vscode中,输入window.onkeydown = (event) => { console.log('onkeydown')},编辑器会提示参数“event”隐式具有“any”类型,而没有进行上下文推断。 但是在之前的一些版本里就可以正常推断,请问这个是哪里的问题呢?

    作者回复: 嗯,这个提示是之前没有的,加上 KeyboardEvent 类型就可以了。

    
     4
  • 百炼钢
    2019-08-31

    /**
     * 类型推断
     * 从右向左
     */

    let a = 1
    let b = [1]

    let c = (x = 1) => x + 1

    /**
     * 类型推断
     * 从左向右 (根据上下文)
     */

    window.onkeydown = (event) => {}

    /**
     * 类型断言
     */

    interface Foo {
        bar: number
    }
    let foo = {} as Foo
    foo.bar = 1

    /**
     * 以上使用`as`的方式,不会提示是否缺失定义`bar`属性,
     * 最好的方式是使用下面代码,在定义时就指明类型
     *
     * Property 'bar' is missing in type '{}' but required in type 'Foo'.
     */

    let foo02 : Foo = {
        bar: 1
    }
    展开
    
     1
  • 靑羗
    2019-08-03
    let foo = {} as Foo
     let foo = <Foo>{}
     let foo: Foo = {
        bar: 1
     }

    请问老师 这三种使用方式 第二种方式和其他两种有什么区别呢?
    展开

    作者回复: 第二种和第一种一样,但是不能用在 React 中,建议使用第三种。

    
    
  • Hurry
    2019-07-27
    类型推断
    不需要指定变量的类型(函数的返回值类型),Typescript 可以根据某些规则自动为其推断一个类型。

    1.基础类型推断
    2.最佳通用类型推断
    3.上下文类型推断

    - 前两者都是从右往左的推断,根据值去推断, 例如 let a = 1 // a 被推断的类型是 number
    - 最佳通用类型推断 例如 let b = [1, 'a'] // b 的最佳通用类型 (string | number)[]
    - 根据上下类型推断 例如 window.onkeydown = (event) => {} // 推断 event 为 KeyboardEvent

    - 当类型推断不符合你的要求的时候,你可以使用类型断言 as,但是类型断言不能乱用,要对自己上下文充分了解
    展开
    
    
我们在线,来聊聊吧