下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者
当前播放: 07 | 接口(1):对象类型接口
00:00 / 00:00
标清
  • 标清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看

TypeScript开发实战

共47讲 · 约450分钟
2993
免费
01 | 重塑“类型思维”
免费
02 | 类型基础(1):强类型与...
免费
03 | 类型基础(2):动态类型...
免费
04 | 编写你的第一个TypeScrip...
免费
05 | 基本类型
06 | 枚举类型
07 | 接口(1):对象类型接口
08 | 接口(2):函数类型接口
09 | 函数相关知识点梳理
10 | 类(1):继承和成员修饰...
11 | 类(2):抽象类与多态
12 | 类与接口的关系
13 | 泛型(1):泛型函数与泛...
14 | 泛型(2):泛型类与泛型...
15 | 类型检查机制(1):类型...
16 | 类型检查机制(2):类型...
17 | 类型检查机制(3):类型...
18 | 高级类型(1):交叉类型...
19 | 高级类型(2):索引类型
20 | 高级类型(3):映射类型
21 | 高级类型(4):条件类型
22 | ES6与CommonJS的模块系统
23 | 使用命名空间
24 | 理解声明合并
25 | 如何编写声明文件
26 | 配置tsconfig.json(1)...
27 | 配置tsconfig.json(2)...
28 | 配置tsconfig.json(3)...
29 | 编译工具:从ts-loader到...
30 | 代码检查工具:从TSLint到...
31 | 使用Jest进行单元测试
32 | 创建项目
33 | 组件与类型(1):函数组...
34 | 组件与类型(2):高阶组...
35 | 事件处理与数据请求
36 | 列表渲染与路由
37 | Redux与类型
38 | 搭建服务端开发环境
39 | 列表的CRUD
40 | 导出Excel
41 | 搭建Vue开发环境
42 | 组件封装
43 | 组件发布
44 | 共存策略
45 | 宽松策略
46 | 严格策略
47 | 结束语
本节摘要

精选留言(10)

  • 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、 可以同时使用两种类型的索引,但是数字索引的返回值必须是字符串索引返回值类型的子类型。
    因为 数字索引或转化为字符串索引,而转化的这部分索引对应的值的类型范围 超过了 字符串索引类型的范围,就会报错,相当于超出范围。

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

    作者回复: 给你点赞

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

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

    4
  • 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

    2
  • 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
    1
  • 2019-11-08
    interface ILike {
         ID?:number,
         desc?:number,
         URL:string

    为什么会报错呢?
    展开
    1
  • 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

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

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

  • 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'
    }
    注意,并不涉及任何字符串匹配问题。