chst365's blog chst365's blog
首页
  • Git
  • 网络
  • 操作系统
  • 浏览器
  • webpack
  • JavaScript
  • TypeScript
  • 性能
  • 工程化
  • React
  • 编程题
  • React技术揭秘
  • 算法
  • Node
  • 编码解码
  • NodeJS系列
  • Linux系列
  • JavaScript系列
  • HTTP系列
  • GIT系列
  • ES6系列
  • 设计模式系列
  • CSS系列
  • 小程序系列
  • 数据结构与算法系列
  • React系列
  • Vue3系列
  • Vue系列
  • TypeScript系列
  • Webpack系列
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

chst365

DIV工程师
首页
  • Git
  • 网络
  • 操作系统
  • 浏览器
  • webpack
  • JavaScript
  • TypeScript
  • 性能
  • 工程化
  • React
  • 编程题
  • React技术揭秘
  • 算法
  • Node
  • 编码解码
  • NodeJS系列
  • Linux系列
  • JavaScript系列
  • HTTP系列
  • GIT系列
  • ES6系列
  • 设计模式系列
  • CSS系列
  • 小程序系列
  • 数据结构与算法系列
  • React系列
  • Vue3系列
  • Vue系列
  • TypeScript系列
  • Webpack系列
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 浏览器

  • webpack

  • TypeScript

    • 一、类型基础
    • 二、数据类型
    • 三、接口
      • 对象类型接口
      • 函数类型接口
        • 函数定义
    • 四、类
    • 五、类与接口的关系
    • 六、泛型
    • 七、类型检查机制
    • 八、高级类型
    • 九、ES6与CommonJS的模块系统
    • 十、使用命名空间
    • 十一、声明合并
    • 十二、如何编写声明文件?
    • 十三、tsconfig配置
    • 十四、编译工具:从ts-loader到Bable
    • 十五、代码检查工具:从TSLint到ESLint
    • 十六、单元测试
    • 十七、TS在react中的使用
    • 什么是TypeScript?
  • 性能

  • 工程化

  • React

  • JavaScript

  • 编程题

  • React技术揭秘

  • 算法

  • 前端
  • TypeScript
chst365
2020-03-15
目录

三、接口

# 三、接口

# 对象类型接口

interface List {
    // 只读属性:不可更改
    readonly id: number;
    name: string;
    // 字符串索引签名
    [x: string]: any;
    // 可选属性 
    age?: number
}
interface Result {
    data: List[]
}
function render(result: Result) {
    result.data.forEach((value) => {
        console.log(value.id, value.name)
        if (value.age) {
            console.log(value.age)
        }
    })
}
let result = {
    data: [
        {id: 1, name: 'A', sex: 'male'},
        {id: 2, name: 'B'}
    ]
}
// 字面量形式,编译类型检查会报错
// 绕过类型检查的方式:
// 1. 通过给一个变量
// 2. 使用类型断言
// 3. 使用字符串索引签名
// 
// 类型断言有两种写法:建议用写法一,写法二在react里面有冲突
// 写法一:
render({
    data: [
        {id: 1, name: 'A', sex: 'male'},
        {id: 2, name: 'B'}
    ]
} as Result)  
// 写法二:
render(<Result>{
    data: [
        {id: 1, name: 'A', sex: 'male'},
        {id: 2, name: 'B'}
    ]
})  
render(result)
// 数字索引字符串数组
interface StringArray {
    [index: number]: string
}
let charts: StringArray = ['A', 'B']
// 字符串索引字符串数组
interface Names {
    [x: string]: any;
    // y:number;
    [z: number]: string
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59

# 函数类型接口

# 函数定义

// 函数定义
function sub(x: number, y: number) {
    return x - y
}

let sub2: (x: number, y: number) => number 

type sub3 = (x: number, y: number) => number

interface sub4 {
    (x: number, y: number): number
}

// 可选参数
function sub5(x: number, y?: number) {
    return y ? x - y : x;
}
sub5(1)

// 在必选参数前的默认参数是不可省略的,必选传入明确的undefined,来获取默认值
// 在必选参数后的默认参数是可以不传的
function sub6(x: number, y = 0, z: number, q = 1) {
    return x + y + z + q
}
console.log(sub6(1, undefined, 3))

// 当参数不确定的时候,可以使用剩余参数
function sub7(x: number, ...rest: number[]) {
    // 数组的reduce方法求和
    return x + rest.reduce((pre, cur) => pre + cur)
}
console.log(sub7(1, 2, 3, 4, 5))

// 函数重返
function sub8(...rest: number[]): number;
function sub8(...rest: string[]): string;
function sub8(...rest: any[]): any {
    let first = rest[0];
    if (typeof first === 'string') {
        return rest.join('')
    }
    if (typeof first === 'number') {
        return rest.reduce((pre, cur) => pre + cur)
    }
} 
console.log(sub8(1, 2, 3))
console.log(sub8('a', 'b', 'c'))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#语言#TypeScript
上次更新: 2021/04/22, 00:08:06
二、数据类型
四、类

← 二、数据类型 四、类→

最近更新
01
面试官
03-27
02
this&指针&作用域&闭包
03-27
03
前端
03-27
更多文章>
Theme by Vdoing | Copyright © 2019-2025 chst365 | 豫ICP备17031889号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式