TypeScript基础入门 - 函数 - this(二)

简介: 转载TypeScript基础入门 - 函数 - this(二)项目实践仓库https://github.com/durban89/typescript_demo.gittag: 1.2.3为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能直接运行看到输出的结果。

转载

TypeScript基础入门 - 函数 - this(二)

项目实践仓库

https://github.com/durban89/typescript_demo.git
tag: 1.2.3

为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能直接运行看到输出的结果。

npm install -D ts-node

后面自己在练习的时候可以这样使用

npx ts-node 脚本路径

函数

this

学习如何在JavaScript里正确使用this就好比一场成年礼。 由于TypeScript是JavaScript的超集,TypeScript程序员也需要弄清 this工作机制并且当有bug的时候能够找出错误所在。 幸运的是,TypeScript能通知你错误地使用了 this的地方。 如果你想了解JavaScript里的 this是如何工作的,那么首先阅读Yehuda Katz写的Understanding JavaScript Function Invocation and "this"。 Yehuda的文章详细的阐述了 this的内部工作原理,因此这里只做简单介绍。

this参数

继续上篇文章【TypeScript基础入门 - 函数 - this(一)

this.suits[pickedSuit]的类型依旧为any。 这是因为 this来自对象字面量里的函数表达式。 修改的方法是,提供一个显式的 this参数。 this参数是个假的参数,它出现在参数列表的最前面,如下

function f(this: void) {
    // 确保`this`在这个独立功能中无法使用
}

我们添加一些接口,Card 和 Deck,让类型重用能够变得清晰简单些,代码如下

interface Card {
    suit: string;
    card: number;
}

interface Deck {
    suits: string[];
    cards: number[];
    createCardPicker(this: Deck): () => Card;
}

let deck: Deck = {
    suits: [
        'hearts',
        'spades',
        'clubs',
        'diamods'
    ],
    cards: Array(52),
    createCardPicker: function (this: Deck) {
        return () => {
            let pickedCard = Math.floor(Math.random() * 52);
            let pickedSuit = Math.floor(pickedCard / 13);

            return {
                suit: this.suits[pickedCard],
                card: pickedCard % 13,
            }
        }
    }

}

let cardPicker = deck.createCardPicker();
let pickedCard = cardPicker();
console.log("card: " + pickedCard.card + " of " + pickedCard.suit);

运行后得到的结果类似如下

$ npx ts-node src/function_5.ts
card: 3 of diamods


现在TypeScript知道createCardPicker期望在某个Deck对象上调用。 也就是说 this是Deck类型的,而非any,因此--noImplicitThis不会报错了。

本实例结束实践项目地址

https://github.com/durban89/typescript_demo.git
tag: 1.2.4
目录
相关文章
|
6月前
|
JavaScript 前端开发
【TypeScript入门】TypeScript入门篇——数据类型
我们人类可以很容易的分清数字与字符的区别,但是计算机并不能呀,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,“汉”是文字,否则它是分不清1和‘汉’的区别的,因此,在每个编程语言里都会有一个叫数据类型的东东,其实就是对常用的各种数据类型进行了明确的划分,你想让计算机进行数值运算,你就传数字给它,你想让他处理文字,就传字符串类型给他。
65 3
|
6月前
|
JavaScript 前端开发 编译器
TypeScript 函数第一章
TypeScript 函数第一章
73 4
|
6月前
|
JavaScript 前端开发 安全
2020你应该知道的TypeScript学习路线【Typescript基础介绍】
2020你应该知道的TypeScript学习路线【Typescript基础介绍】
66 2
|
JavaScript Java
TypeScript入门笔记(三):函数
TypeScript入门笔记(三):函数
53 1
|
6月前
|
JavaScript 前端开发
TypeScript 基础语法入门(上)
TypeScript 基础语法入门
126 0
|
6月前
|
JavaScript
TypeScript 基础语法入门(下)
TypeScript 基础语法入门
78 0
|
6月前
|
JavaScript 前端开发
TypeScript入门视频2h(上)
TypeScript入门视频2h
87 0
|
6月前
|
JavaScript 安全
TypeScript入门视频2h(下)
TypeScript入门视频2h
69 0
|
JavaScript 前端开发 Java
TypeScript入门之函数
TypeScript入门之函数
94 0
|
Java C# Python
TypeScript-03-语法基础
环境都搭好了一直没时间继续往下写 疫情期间就在家好好梳理知识吧 必须让自己强大起来,才有选择的权利
149 0
TypeScript-03-语法基础