1.)先来一段Typescript的环境安装.

安装nodejs ,下载地址:https://nodejs.org/en/download/                 //(node-v12.18.3-x64.msi)
ts教程:https://www.runoob.com/typescript/ts-ambient.html
步骤1)安装npm(安装nodejs)
npm -v
步骤2)通过node.js commond promot来实现npm命令安装typescript
npm install -g typescript
步骤3)查看是否安装typescript成功.
tsc -v
步骤4)编译指定的ts代码为js.
tsc "F:\ConfigLab.TypeScriptLab\wwwroot\js\ts\test.ts" "F:\ConfigLab.TypeScriptLab\wwwroot\js\ts\test2.ts" "F:\ConfigLab.TypeScriptLab\wwwroot\js\ts\ModuleDemo.ts"
之后同目录下会生成js文件。

2.)分享下学习调试笔记.

2.1)Ts源码.

 2.1.1)test2.ts(常规语法及面向对象相关).

//import ModuleDemoRef = require("./ModuleDemo");//可能要考虑用webpack打包,或者设置(https://www.jianshu.com/p/7d443361ad20)

//---定义变量
var message: string = "Hello World2"
console.log(message);
//--定义类
class UserInfo {
type: string ;
constructor(type: string) {
this.type = type;
}
username(): string {
return "匿名用户";
}
age(): number {
return 25;
}
getExplain(): string {
return this.type + "_" + this.username() + "_" + this.age();
}
}
var obj = new UserInfo("102");
console.log(obj.username());
console.log(obj.getExplain());
//--定义一个2进制
let hexLiteral: number = 0b1001;
//--定义一个泛型集合
let arr: Array<number> = [1, 2];
//--定义一个元组
let x: [string, number];
x = ['Runoob', 1]; // 运行正常
console.log(x[0]); // 输出 Runoob
//--定义一个枚举
enum Color { Red, Green, Blue };
let c: Color = Color.Blue;
console.log(c); // 输出 2
let viewModel: any = (<any>window).viewModel
//关于Map
/*
let countryMap = new Map();
countryMap.set("cn", "中国");
countryMap.set("jp", "日本");
countryMap.set("usa", "美国");
console.log("usa对应的国家=" + countryMap.get("usa"));
// 迭代 Map 中的 key
for (let key of countryMap.keys()) {
console.log(key + ":" + countryMap.get(key));
}
*/
//联合类型(指定若干个类型,如果是其它类型则为非法)
var mutiltype_var: string | number
mutiltype_var = 10
console.log("联合类型.数字为 " + mutiltype_var)
mutiltype_var = "ten"
console.log("联合类型.字符串为 " + mutiltype_var) /*
if (typeof (viewModel) != "undefined") {
window.alert("这里是ts中调用viewModel的属性:" + viewModel.userName);
}
else {
window.alert("ts.viewModel未定义");
}
*/
function getTxtValue(name: string): string {
var val = (document.getElementsByName(name)[0] as HTMLInputElement).value;
return val;
};
function setTxtValue(name: string,val:string): void {
(document.getElementsByName(name)[0] as HTMLInputElement).value = val;
};
//设置事件
function setEventListen(name: string): void {
(document.getElementsByName(name)[0] as HTMLInputElement).onclick = function () {
alert("ts.setEventListen:添加了一个事件");
};
};
//定义并引用 jQuery
declare var $: (selector: string) => any;
function getValueByJquery(name: string): string {
return $("[name='"+name+"']").val();
}
//关于接口与继承
interface ILoginValide {
UserName: string,
Pwd: string,
Valide: () => string
}
var userLoginValide: ILoginValide = {
UserName: "user001",
Pwd: "123456",
Valide: (): string => {
return "账户密码验证";
}
}
console.log("userLoginValide.UserName=" + userLoginValide.UserName);
interface IVerycodeLoginValide extends ILoginValide {
UserName: string,
Pwd: string,
AssistValideCode: string,
Valide: () => string
}
var verycodeLoginValide: IVerycodeLoginValide={
UserName: "user002",
Pwd:"123456",
AssistValideCode: "590122",
Valide: (): string => {
return "图形验证码验证";
}
}
console.log("verycodeLoginValide.AssistValideCode=" + verycodeLoginValide.AssistValideCode); //类的继承
class accountLoginValide {
UserName: string;
Pwd: string;
constructor(sUserName: string,sPwd:string) {
this.UserName = sUserName;
this.Pwd = sPwd;
}
Valide(): void {
console.log("loginValide.Valide=" + this.UserName);
}
}
class phoneLoginValide extends accountLoginValide {
static smsCount: number;//静态字段
public smscode: string;//默认是public,也可以指定为private,protected
Valide(): void {
phoneLoginValide.smsCount++;
console.log("phoneLoginValide.Valide=" + this.UserName + ",smscode=" + this.smscode);
}
}
//类实现接口
class simpleLoginValide implements ILoginValide {
private loginUrl: string="http://api.test.com/usercenter/login";
UserName: string;
Pwd: string;
constructor(sUserName: string, sPwd: string) {
this.UserName = sUserName;
this.Pwd = sPwd;
}
Valide(): string{
//ajax请求等
console.log("simpleLoginValide.实现接口ILoginValide,usercenter.url=" + this.loginUrl);
return "";
}
}
//动态类型:鸭子类型
interface IPoint {
x: number
y: number
}
function PointsAdd(p1: IPoint, p2: IPoint): IPoint {
var x = p1.x + p2.x
var y = p1.y + p2.y
return { x: x, y: y }
}
var newPoint = PointsAdd({ x: 3, y: 4 }, { x: 5, y: 1 });
console.log("动态类型(鸭子类型): x=" + newPoint.x + ",y=" + newPoint.y); namespace configlab {
export interface IAjax {
url: string,
data: string,
method: string,
ajax:()=>string
}
export class AjaxProcesser implements IAjax {
url: string;
data: string;
method: string;
constructor(sUrl: string, sData: string, sMethod: string) {
this.url = sUrl;
this.data = sData;
this.method = sMethod;
}
ajax(): string {
console.log("ajax请求,url=" + this.url + ",data=" + this.data + ",method=" + this.method);
return "ajax请求了";
}
}
}
//页面全局初始化
function InitTs(): void {
//绑定事件
setEventListen("btn_dynamic");
//创建一个实例
var lv = new accountLoginValide("user007", "123456");
lv.Valide();
//创建一个子类实例
var lvPhone = new phoneLoginValide("user007", "123456");
lvPhone.smscode = "512009";
for (var i = 0; i < 10; i++) {
lvPhone.Valide();
}
console.log("phoneLoginValide.Valide=" + this.UserName + ",smscode=" + this.smscode + ",smsCount=" + phoneLoginValide.smsCount);
//判断对象是否是指定类型
if (lv instanceof phoneLoginValide) {
console.log("lv instanceof phoneLoginValide的结果:true");
}
else {
console.log("lv instanceof phoneLoginValide的结果:false");
}
//类实现接口的效果展示
var lvSimple = new simpleLoginValide("user007", "123456");
lvSimple.Valide();
//命名空间中的类的实例
var objAjax = new configlab.AjaxProcesser("http://api.test.com","username=u1&pwd=123456","POST");
objAjax.ajax();
//引用其它模块的相关接口或类(引用需要用到import,位于文件头部)
////可能要考虑用webpack打包,或者设置(https://www.jianshu.com/p/7d443361ad20)
//var objAjaxFile = new ModuleDemoRef.SubmitFileProcesser("http://api.test.com", "username=u1&pwd=123456", "POST","D:\\a.txt");
//objAjaxFile.ajaxFile();
}

2.1.2)moduledemo.ts(当做一个将被导入引用的外部模块)..定义interface和class需要以export开头.

    export interface ISubmitFile {
url: string,
data: string,
method: string,
filename:string,
ajaxFile: () => string
}
export class SubmitFileProcesser implements ISubmitFile {
url: string;
data: string;
method: string;
filename: string;
constructor(sUrl: string, sData: string, sMethod: string,sFilename:string) {
this.url = sUrl;
this.data = sData;
this.method = sMethod;
this.filename = sFilename;
}
ajaxFile(): string {
console.log("ajaxFile请求,url=" + this.url + ",data=" + this.data + ",method=" + this.method + ",filename=" + this.filename);
return "ajax请求了";
}
}

2.2)Html源码.

@{
ViewData["Title"] = "TsLab";
} <script type="text/javascript" src="~/lib/jquery/dist/jquery.min.js"></script>
<script type="text/javascript"> function showData() {
alert("ts中的方法获取: username=" + getTxtValue("UserName") + ",linkTel=" + getTxtValue("linkTel") + ",userType=" + getTxtValue("userType"));
}
function setData() {
setTxtValue("linkTel", "15800010003");
alert("ts中的方法获取: username=" + getTxtValue("UserName") + ",linkTel=" + getTxtValue("linkTel") + ",userType=" + getTxtValue("userType"));
alert("ts.getValueByJquery=" + getValueByJquery("linkTel"));
}
</script>
<div>
<label>用户名</label>
<input name="UserName" type="text" value="user1"/><br />
<label>联系电话</label>
<input name="linkTel" type="text" value="15900010002" />
<label>用户类型</label>
<select name="userType">
<option value="100">老手</option>
<option value="101" selected="selected">新手</option>
</select> <span id="tips"></span>
</div>
<input type="button" value="获取用户名" onclick="showData();" />
<input type="button" value="设置用户名(123)" onclick="setData();" />
<input name="btn_dynamic" type="button" value="需要动态绑定事件的" />
<a></a> <script type="text/javascript" src="~/js/ts/test2.js?v=202008231621016"></script>
<script type="text/javascript">
InitTs()
</script>

2.3)效果展示.

记录Typescript的学习调试笔记(比 javascript更具面向对象,强类型检查,静态字段,适合现代的大团队分工与管理风格).的更多相关文章

  1. 编程笔记:JavaScript 中的类型检查

    在Badoo的时候我们写了大量的JS脚本,光是在我们的移动web客户端上面就有大概60000行,可想而知,维护这么多JS可是相当具有挑战性的.在写如上规模js脚本客户端应用的时候我们必须对一件事保持警 ...

  2. typescript handbook 学习笔记1

    概述 这是我学习typescript的笔记.写这个笔记的原因主要有2个,一个是熟悉相关的写法:另一个是理清其中一些晦涩的东西.供以后开发时参考,相信对其他人也有用. 学习typescript建议直接看 ...

  3. 【学习笔记】JavaScript的基础学习

    [学习笔记]JavaScript的基础学习 一 变量 1 变量命名规则 Camel 标记法 首字母是小写的,接下来的字母都以大写字符开头.例如: var myTestValue = 0, mySeco ...

  4. UWP学习开发笔记记录(开篇)

    零零散散开发微软移动2年多了,基本上从未记录或写过任何笔记.所以打算写一些自己的心得和技术的分享,大家一起来共同探讨.虽然现在UWP的工作几乎没有了,但是我感觉大家都是在观望,再看接下来微软的动作,所 ...

  5. JavaScript特效(调试笔记)

    JavaScript特效 一.在网页上显示当前的时间日期,例如:“2016年3月26日 星期六”. js源代码: function getTime() { var today = new Date() ...

  6. RX学习笔记:JavaScript数组操作

    RX学习笔记:JavaScript数组操作 2016-07-03 增删元素 unshift() 在数组开关添加元素 array.unshift("value"); array.un ...

  7. seaJs学习笔记之javascript的依赖问题

    之前分别为大家介绍了有关javascript中的冲突和性能问题,今天为大家介绍一下有关javascript中的依赖问题.我们将继续就之前javascript中性能问题继续介绍. 先来回顾一下性能问题的 ...

  8. 再起航,我的学习笔记之JavaScript设计模式02

    我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 我们 ...

  9. typescript handbook 学习笔记4

    概述 这是我学习typescript的笔记.写这个笔记的原因主要有2个,一个是熟悉相关的写法:另一个是理清其中一些晦涩的东西.供以后开发时参考,相信对其他人也有用. 学习typescript建议直接看 ...

  10. typescript handbook 学习笔记3

    概述 这是我学习typescript的笔记.写这个笔记的原因主要有2个,一个是熟悉相关的写法:另一个是理清其中一些晦涩的东西.供以后开发时参考,相信对其他人也有用. 学习typescript建议直接看 ...

随机推荐

  1. Codeforces Round #577 (Div. 2) C. Maximum Median

    题意:就是给一n(奇数)个元素数组,可以对它的元素执行k次+1操作,递增排序,求中位数最大是多少. 那我们在排完序之后,中位数前的元素可以不管它,只要对中位数后的操作就行,我们要判断和中位数相等的元素 ...

  2. String类型变量的使用

    1.String属于引用数据类型,翻译为:字符串 2.声明String类型变量时,使用一对"" 3.String可以和8种基本数据类型变量做运算,且运算只能是连接运算:+ 4.运算 ...

  3. linux安装达梦数据库8

    PS.本次测试只是为了项目需要,但是在部署和启动程序的时候发生了一系列的报错,由此记录下来为日后作参考 安装达梦数据库 1. 达梦数据库(DM8)简介 达梦数据库管理系统是武汉达梦公司推出的具有完全自 ...

  4. 20220729 - DP训练 #2

    20220729 - DP训练 #2 时间记录 \(8:00-8:10\) 浏览题面 \(8:10-8:50\) T1 看题想到了建树,从每一个点遍历,若能遍历每一个点,则可以获胜 快速写完之后,发现 ...

  5. iOS开发之自定义日历控件

    前言 日常开发中经常会遇到日期选择,为了方便使用,简单封装了一个日历控件,在此抛砖引玉供大家参考. 效果 功能 支持单选.区间 支持默认选中日期 支持限制月份 支持过去.当前.未来模式 支持frame ...

  6. maven的下载、安装、配置,idea中配置Maven

    下载 下载链接: 点击下载地址 : 找到:对应版本的包下载 安装 下载后的压缩包解压出来,然后将解压后的包放到日常安装软件的位置即安装成功,当然取决于个人意愿,也可以不移动. 打开安装包后的目录结构简 ...

  7. 开源网络协议栈onps诞生记

    小孩没娘,说来话长,一切都要从LwIP说起.大约是06年9月,本人在二姨的坛口发布了一篇小文--<uC/OS-II 平台下的 LwIP 移植笔记>.自此一发不可收拾,开启了一段我与LwIP ...

  8. 【Bluetooth|蓝牙开发】二、蓝牙开发入门

    个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得! [所有文章汇总] 1.蓝牙基础概念 蓝牙,是一种利用低功率无线电,支持设备短距离通信的无线电 ...

  9. JVM学习笔记——内存模型篇

    JVM学习笔记--内存模型篇 在本系列内容中我们会对JVM做一个系统的学习,本片将会介绍JVM的内存模型部分 我们会分为以下几部分进行介绍: 内存模型 乐观锁与悲观锁 synchronized优化 内 ...

  10. JVM运行时数据区域详解

    参考文章: <Java Se11 虚拟机规范> <深入理解Java虚拟机-JVM高级特性与最佳实践 第3版>- 周志明 本文基于Java Se 11讲解. 根据<Java ...