深入理解TypeScript——第一章:上手篇
怎么定义TypeScript呢? TypeScript是一个工具 是一个编译器
- 编译代码
TypeScript,通过它的能力,默认使用tsc命令,可以根据.ts为后缀名的文件生成一个新的js文件
2、类型注解
TypeScript里的类型注解是一种轻量级的为函数或变量添加约束的方式。TypeScript提供了静态的代码分析,它可以分析代码结构和提供的类型注解。
function doSth(who: string): string {
return "I want to say hello to " + who;
}
let who = 'her';
const doWhat = doSth(who);
console.log('doWhat:', doWhat)
// doWhat: I want say hello to her
这里插个题外话,如果部分语法产生error的话,要考虑tsconfig.json这样的配置文件(比如lib部分)是否支持了你需要的Javascript规范,如果不支持的话,建议使用polyfill
3、接口
允许我们在实现接口时候只要保证包含了接口要求的结构就可以
interface Girl {
hair: string;
face: string;
}
function describe(girl: Girl): string {
let words = 'she has '
let decs = Object.entries(girl)
let len = decs.length
for (let i = 0; i < len; i++) {
const [where, like] = decs[i];
words+=(like + ' ' + where)
words+=(i === len - 1 ? '' : ' and ')
}
return words
}
const sentence = describe({
hair: 'long',
face: 'beautiful'
})
console.log('sentence:', sentence);
// sentence: she has long hair and beautiful face
4、类
支持基于类的面向对象编程
在构造函数的参数上使用public等同于创建了同名的成员变量
class She {
praise: string;
constructor(public hair: string, public face: string) {
// this.praise = hair + ' hair' + " and " + face + ' face';
}
}
interface Girl {
hair: string;
face: string;
}
function describe(girl: Girl): string {
let words = 'she has '
let decs = Object.entries(girl)
let len = decs.length
for (let i = 0; i < len; i++) {
const [where, like] = decs[i];
words+=(like + ' ' + where)
words+=(i === len - 1 ? '' : ' and ')
}
return words
}
const she = new She('long', 'beautiful')
const sentence = describe(she)
console.log('sentence', sentence);
上面这段代码通过ts编译,成为了下面这段代码
var She = /** @class */ (function () {
function She(hair, face) {
this.hair = hair;
this.face = face;
// this.praise = hair + ' hair' + " and " + face + ' face';
}
return She;
}());
function describe(girl) {
var words = 'she has ';
var decs = Object.entries(girl);
var len = decs.length;
for (var i = 0; i < len; i++) {
var _a = decs[i], where = _a[0], like = _a[1];
words += (like + ' ' + where);
words += (i === len - 1 ? '' : ' and ');
}
return words;
}
var she = new She('long', 'beautiful');
var sentence = describe(she);
console.log('sentence', sentence);
看起来,只是多了一些特殊的注释,以及修改了一些局部变量名,所以ts主要的功能其实是为了规范书写,校验传入参数是否正确,从而实现更高质量的代码!
深入理解TypeScript——第一章:上手篇的更多相关文章
- ASP.NET自定义控件组件开发 第一章 第二篇 接着待续
原文:ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 很感谢大家给我的第一篇ASP.NET控件开发的支持!在写这些之前,我也看了 ...
- .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9977862.html 写在前面 千呼万唤始出来,首先,请允许我长吸一口气!真没想到一份来自28岁老程序员 ...
- net core体系-web应用程序-4asp.net core2.0 项目实战(CMS)-第一章 入门篇-开篇及总体规划
.NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划 原文地址:https://www.cnblogs.com/yilezhu/p/9977862.html 写在前面 千呼万唤始出来 ...
- 深入理解Magento - 第一章 - Magento强大的配置系统
深入理解Magento 作者:Alan Storm翻译:zhlmmc 前言第一章 - Magento强大的配置系统第二章 - Magento请求分发与控制器第三章 - 布局,块和模板第四章 - 模型和 ...
- 【设计模式+原型理解】第一章:使用Javascript来巧妙实现经典的设计模式
刚开始学习设计模式之前,我是没想说要学习设计模式的,我只是因为想学习JS中的原型prototype知识,一开始我想JS中为什么要存在原型这个东西?于是慢慢通过原型而接触到设计模式,后来发现我这个过程是 ...
- 徒手用Java来写个Web服务器和框架吧<第一章:NIO篇>
因为有个不会存在大量连接的小的Web服务器需求,不至于用上重量级服务器,于是自己动手写一个服务器. 同时也提供了一个简单的Web框架.能够简单的使用了. 大体的需求包括 能够处理HTTP协议. 能够提 ...
- 第一章入门篇CSS样式的分类、盒模型
1.CSS样式的分类 CSS样式分为一项4种: 1.内联样式表,直接写在元素style属性里面的样式,如 <p style="color:red;">内联样式</ ...
- ASP.NET自定义控件组件开发 第一章 第三篇
原文:ASP.NET自定义控件组件开发 第一章 第三篇 第三篇:第一章的完结篇 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待 ...
- ASP.NET自定义控件组件开发 第一章 第三篇 第一章的完结篇
ASP.NET自定义控件组件开发 第一章 第三篇 第三篇:第一章的完结篇 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ...
随机推荐
- 有了MDL锁视图,业务死锁从此一目了然
摘要:MDL锁视图让一线运维人员清晰地查看数据库各session持有和等待的元数据锁信息,从而找出数据库MDL锁等待的根因,准确地进行下一步决策. 当多用户共同存取数据时,数据库中就会产生多个事务同时 ...
- Qt QString转char[]数组
Qt QString转char[]数组 QString s1="1234456";char str[20]={0};strcpy(str,s1.toStdString().c_st ...
- C++中的快读和快写
快读原理 单个字符的读入速度要比读入数字快,因此我们以字符的形式先读入,然后处理计算转为数字. 代码 inline int read(){ register int x = 0, t = 1; reg ...
- PyTorch入门-CIFAR10图像分类
CIFAR10数据集下载 CIFAR10数据集包含10个类别,图像尺寸为 3×32×32 官方下载地址很慢,这里给一个百度云: https://pan.baidu.com/s/1oTvW8wNa-VO ...
- 使用Unity的50个建议
关于这些建议 这些建议并不适用于所有的项目 这些建议是基于我与3-20人的小团队项目经验总结出来的 结构.可重复使用性.明晰度都是有价的——团队规模和项目规模决定了是否值得付这个价. 一些建议也许公然 ...
- Unity3D中可重载虚函数的总结
重载虚函数:Unity3D中所有控制脚本的基类MonoBehaviour有一些虚函数用于绘制中事件的回调,也可以直接理解为事件函数,例如大家都很清楚的Start,Update等函数,以下做个总结. A ...
- 关于移动端的文本框获取焦点时导致fixed或absolute定位的按钮被手机键盘顶上去的问题
var win_h = $(window).height();//关键代码 window.addEventListener('resize', function () { if($(window).h ...
- 解读AngularJS的setupModuleLoader函数
http://www.cnblogs.com/whitewolf/p/angular-module-declare-and-get.html 看了上面这篇文章,自己读了一下代码,以下是个人理解,如有请 ...
- vue3.0 加载json的“另类”方法(非ajax)
问题 加载json一定要用ajax的方式吗? 最近学习vue3.0,在实现一个功能的时候发现一个问题-- 写代码的时候,需要的json太长.太多,和代码放在一起太混乱.看代码总有翻来翻去,又没有&qu ...
- Poi Excel 设置列宽计算公式
int width = 40;sheet.setColumnWidth(0,252*width+323); 作者:彼岸舞 时间:2020\07\27 内容关于:工作中用到的小技术 本文来源于网络,只做 ...