• 极客时间
    2019-07-19
    1、接口约束对象 函数 类的结构
    2、对象的接口如何定义
    3、关键字 interface
    4、作用 :规范对象的属性 属性的类型 属性值的类型
    5、类型断言 用as 或者<>的形式 ,后者在react中使用会出问题
    6、可选属性 通过?来设置
    7、只读属性 通过readonly 来设置
    8、当不确定接口中属性个数时需要使用 索引签名
    9、索引签名包括字符串索引签名和数字索引签名
    10、当接口中定义了一个索引后,例如设置了 【x:string】= string,就不能设置y:number了。
    因为设置了【x:string】= string相当于这个接口的字符串索引返回值都是字符串,而y:number违背这一原则,冲突了。反过来 如果定义了【x:string】=Number, 就不能设置 y:string了。
    11、 可以同时使用两种类型的索引,但是数字索引的返回值必须是字符串索引返回值类型的子类型。
    因为 数字索引或转化为字符串索引,而转化的这部分索引对应的值的类型范围 超过了 字符串索引类型的范围,就会报错,相当于超出范围。

    笔记加个人理解,万望老师指点纠正
    展开

    作者回复: 给你点赞

    
     14
  • 曾小贤
    2019-07-18
    数字索引的类型接口能理解,比如定义成[x:number]:string,但是[x:string]:string的实际类型该是什么呢?这块没理解,示例里的NAMES 它的真实值该是长什么样的?

    作者回复: interface Names {
        [x: string]: string;
    }
    let names: Names = {
        xiaoming: "",
        xiaohong: ""
    }

    
     5
  • Mokc
    2019-07-24
    请问下老师,在用类型断言绕过类型检查中,为什么data只有一个List对象也会报错呢?是因为必须是一个数组吗?
    render({
        data:[
            {id:1,name:'A',sex:'male'},
        ]
    }as Result); // 为什么只写一行也会报错
    render({
        data:[
            {id:1,name:'A',sex:'male'},
            {id:2,name:'B'}
        ]
    }as Result); // 这样就不报错了
    展开

    作者回复: 这个问题比较奇怪,好像数组中有一个元素符合List定义就通过了检查。原因暂时未知。

    两个解决方案:
    1)用字符串索引签名
    2)最后一行 as unknown as Result

    
     4
  • kgdmhny
    2019-07-28
    老师,请问一下,我这边的环境 '05.datatype.ts' 与 ‘07-08.interface.ts’ 文件里的变量定义有重复冲突的报错。
    例如:
    Cannot redeclare block-scoped variable 'add' .ts(2451)
    05.datatype.ts(18, 5): 'add' was also declared here.
    请问一下怎么解决这个问题?是因为我的环境里某个编译项配制项没有配吗?

    作者回复: 这是正常的,这些代码都是代码片段,为了演示方便,没有考虑重名问题。如果要一起运行,你可以把它们都定义成模块,或者修改一下变量名。

     1
     2
  • GitHubGanKai
    2019-11-07
    请问一下老师,我在ant-desgin-react 中看见这个 export interface ActionButtonProps {
      type?: ButtonType;
      actionFn?: (...args: any[]) => any | PromiseLike<any>;
      closeModal: Function;
      autoFocus?: boolean;
      buttonProps?: NativeButtonProps;
    }
    请问:actionFn?: (...args: any[]) => any | PromiseLike<any>; 中的PromiseLike<any>是什么意思?
    展开

    作者回复: 你可以按住ctrl,点击PromiseLike看它的定义,它是给resolve或reject添加回调的函数,返回一个Promise

    
     1
  • LearnAndTry
    2020-01-23
    老师讲的真是非常实用了。 ts官方文档真是太生硬了。学习起来太费劲
    
    
  • yj
    2020-01-08
    想了很久也没有搞懂字符串索引签名有什么用?

    作者回复: 一般用来定义一个成员数量不确定的对象类型接口

    
    
  • Mryi
    2019-11-08
    interface ILike {
         ID?:number,
         desc?:number,
         URL:string
    }
    为什么会报错呢?
    展开
     1
    
  • away
    2019-09-28
    interface Names {
      [index: string]: string;
    }
    let nam: Names = ['a3', '3']
    这个报错要怎样写呢? Type 'string[]' is not assignable to type 'Names'.
      Index signature is missing in type 'string[]'
    展开

    作者回复: Names是字符串索引类型,不能赋值为数组(数字索引),赋值一个对象就行了。

     1
    
  • ...
    2019-09-18
    索引签名:当接口中属性的个数不确定时,需要用到。分为数字索引签名和字符串索引签名。数字索引签名的属性对应值的类型必须是字符串索引签名的属性对应值类型的字集
    
    
  • away
    2019-07-23
    源码里没看到 webpack 里有监听 part1.base 里的文件呢,怎么打印出来的??

    作者回复: 这个目录里的代码都是独立的代码片段,要运行其中一个文件,就把内容copy到index.ts,或导入进来。

    
    
  • WL
    2019-07-21
    对于字符串索引签名我不是很理解, 请问一下老师, [x: string]: any; 的意思是用字符串取匹配list的实例对象的属性名, 如果有属性名与这个字符串匹配的name就返回属性的值吗?

    作者回复: interface Names {
        [x: string]: any
    }
    let names: Names

    字符串索引签名有两层含义:
    1)names 可以有任意多个属性
    2)names 可以用字符串索引,既 names['xxx'],或 names.xxx(也可以用数字索引,names[number],数字会被转换成字符串)

    如:
    names = {
        0: 0,
        a: 'a'
    }
    注意,并不涉及任何字符串匹配问题。

    
    
我们在线,来聊聊吧