1.编译型语言
2.强类型语言
3.真正的面向对象的语言: 有借口、有泛型、有枚举、有访问修饰符
AMD类型的面向对象的语言
 
 
npm install -g typescript        下载编译工具
 
编译ts文件       tsc xxx.ts/xxx.tsx/xxx.d.ts
 
 
一、有类型的script   ----  在编译期进行检查,ts只编译不执行
    【声明变量】
      var 变量名: 类型
      var a:number;
 
    【基本类型】
    number
    string    
    boolean   : 只有两个值,true、false
    symbol  :  
    void  :  空,一般情况下用做返回值。不允许赋值
    null : 只有一个类型 --- null 
    undefined : 只有一个类型---undefined
    enum   :  枚举, 列举所有的东西 
            性别、星期---有限的可能性
 
enum Gender{
male,
female
} var sex:Gender;
   
any :  任何类型。 变体变量---没有固定类型,可以是任何类型
 
    js的变量都是变体变量.
 
var a: any;

a = 12;
a = 'abc';

【类型推理、类型推测】---根据初始化的值推测类型(隐式类型推测)

【类型推理、类型推测】---根据初始化的值推测类型(隐式类型推测)

var a = 13;

a = 'abc';  //  报错  , ts 已经推理 a: number;
var a;

a = 12;
a = 'abc'; // a: any;

【冲突检测】编译器会自动排除掉无用的选项

enum WEEK {
SUN,
SAT,
FRE,
TUS
} var w = WEEK.SUN; switch(w) {
case WEEK.SUN:
break;
case WEEK.STA;
break;
} // 报错,不会出现WEEK.STA,所以ts编译器认为不应该写第二种case

【联合类型】

var a:number | string;

a = 12;
a = 'abc';
var a:number | string;

var b: boolean;

a = b ? 12: false;
// 报错,false不能作为结果

【数组的类型】

var arr = [12, 5, 8];    // 隐式类型声明  var arr:number[] = [12, 5, 8];

arr[3] = 'abc';   //  报错
arr: 类型[]  = [];
 
数组其实还是一种泛型;
 
Array --- 典型的泛型  
 
interface Array<T> {
reverse(): T[];
sort(compare?: (a: T, b:T) => number):T[];
...
}
var arr:number[] = [12, 5];

//  等同于

var arr: Array<number> = new Array<number>();

【函数的类型】 参数和返回值都可以定义类型

function show(a: any, b:number) {
console.log(a + b);
} show(12,5); // 报错

参数不仅可以有类型还有函数签名检查(匹配参数的数量)

function show(a: number, b: number) {
console.log(a + b);
} show(12); // 报错

返回值

function sum(a:number, b:number):string {
return a + b;
} console.log(sum(12,5)); // 报错,返回值是string

【外部变量声明】 declare

console.log(a);    // 报错
declare var $;

$(function() {
$('#div')
})
// 不报错
window、 document   叫内置外部声明,不用再次声明。
 
【函数签名】
 
function ajax(url: string, success: (res: string, code: number) => vodi, error: (code:number) => void) {
;
} ajax('1.txt', () => {}, () => {}); // 参数和返回值都有约定
 
【类型】
 
1.基本类型
2.联合类型
3.函数签名
4.对象类型
5.联合类型(复合类型)
 
 
【符合类型--可选类型】
 
var point: {x:number, y:number, z?:number};

point = {x:12,y:5}

point = {x:12,y:5,z:8}
function show(a: Object) {

}
// json
二、接口:interface
 
java中:
 
class Click implements inter {

}
 
接口就是一种约定和限制,是一种必须遵守的规范
 
    比如说 汽车---接口:能开、必须加油
 
interface Point {
x: number,
y: number,
z?: number
} var p:Point p = { x:12, y:5};

三、class

class Person {
// 成员属性
name: string;
age: number; // 构造器
constructor(name: string, age:number) {
this.name = name;
this.age = age;
} // 成员方法
showMe() {
console.log(`我的名字是${this.name},我的年龄是${this.age}`)
}
} var p = new Person('jason', 18); p.showMe();
包括class、extend、多继承
 
 
【访问修饰符】
 
1.public          共有属性            任何类可访问,全局
2.private         私有属性            只有类内部可以访问
3.protected    受保护--友元
 
class Person {
public name: string,
private age: number
} var p = new Person(); p.name = 'jason'; // 报错,name只能在class内部使用
四、泛型。(模板)
 
请区别于any,泛:宽泛(主要原因)
 
class Calc<T> {
a: T;
b: T; constructor(a:T, b: T) {
this.a = a;
this.b = b;
} show(c: T) {
console.log(this.a);
}
} var obj = new Calc<number>(12, 5); obj.a = 12;
obj.b = 'abc'; // 没生命类型为any,但是<number>会替换class中的<T> obj.show(99);

有限制,但不是any,是一个有范围的any。

 

学习angualr之前需要了解的typeScript知识的更多相关文章

  1. 学习Scala: 初学者应该了解的知识

    Scala开发参照清单 这里列出在开发一个Scala工程中需要参照的资料. 官网网站 http://www.scala-lang.org/ 文档网站 http://docs.scala-lang.or ...

  2. Java学习-033-JavaWeb_002 -- 网页标记语言JSP基础知识

    JSP 是 Sun 公司提倡的一门网页技术标准.在 HTML 文件中,加入 Java 代码就构成了 JSP 网页,当 Web 服务器访问 JSP 请求的时候,首先执行其中的 Java 程序源码,然后以 ...

  3. 学习Ruby你需要了解的相关知识(rvm, gem, bundle, rake, rails等)

    这篇文章主要介绍了学习Ruby你需要了解的相关知识(rvm, gem, bundle, rake, rails等),需要的朋友可以参考下     Ruby 这个就不用多说了 RVM 用于帮你安装Rub ...

  4. 总结了零基础学习Java编程语言的几个基础知识要点

    很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.本文总结了零基础学习Java编程语言的几个基础知识要点. 1先了解什么是Java的四个方面   初学者先弄清这 ...

  5. [源码解析] 深度学习分布式训练框架 Horovod (1) --- 基础知识

    [源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 目录 [源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 0x00 摘要 0x01 分布式并 ...

  6. 学习Java,还需要学好哪些知识

    很多人认为学好一门程序语言就需要学好逻辑,其实这对于很多人而言是对的,但是真的对于需要写程序的学员来说,只有逻辑好其实是不够的,如果你能具备以下几项能够为你在程序编译中大大提高工作效率.现在昆明jav ...

  7. Swift 2.0 字符串学习笔记(建议掌握OC字符串知识的翻阅)

    自己公司开现在使用OC语言在写,但Swift似乎是苹果更推荐使用的开发语言,估计也是未来开发的趋势,自己以前有接触swift,但又由于公司的项目赶,也没有时间去好好地学习这款开发语言.现在年底了,项目 ...

  8. 学习Spring必学的Java基础知识(2)----动态代理

    Spring AOP使用动态代理技术在运行期织入增强的代码,为了揭示Spring AOP底层的工作机理,有必要对涉及到的Java知识进行学习.Spring AOP使用了两种代理机制:一种是基于JDK的 ...

  9. 我的 FPGA 学习历程(01)—— FPGA 基础知识和 Quartus 的安装

    高级的嵌入式市场主要分为以下三类:ARM.DSP 和 FPGA. 其中 ARM 是行业内的佼佼者,目前几乎所有的安卓智能手机都使用 ARM 授权的 CPU架构:而 DSP(数字信号处理器) 早年就被大 ...

随机推荐

  1. TCP协议通讯流程

    刚才网上找到的,觉得挺详细的,转来. tcp连接的三次握手大家肯定都熟了,可是有的人不一定对tcp断开的四次握手也很熟悉. 我在园子里面找到一张图,介绍的很好,现在转来!(该图片原博客地址:http: ...

  2. js:实现自定义事件对象接口

    网易2017内推笔试题 要求: 请实现下面的自定义事件Event对象的接口,功能见注释(测试1) 该Event对象的接口需要能被其他对象拓展复用(测试2) //测试1 Event.on('test', ...

  3. 用 python 修改文件中指定的行数

    #! /bin/python filename='setup.ini' lines=[] with open(filename,'r') as f: lines=f.readlines() lines ...

  4. brew - 安装gradle

    我安装完brew之后,马上开始安装gradle,但是shell总是卡在执行"brew update"这里,今天终于解决了,出现这样问题的原因是初次安装brew,它使用的源是国外的, ...

  5. day24 计算任意文件夹大小 , 校验大文件的一致性 , 发抢红包程序

    #!/usr/bin/env python# -*- coding:utf-8 -*- # 1.计算任意一个文件夹的大小(考虑绝对路径的问题)# 基础需求 这个文件夹中只有文件# 进阶需求 这个文件夹 ...

  6. 1.python的一些规范

    Python的一些规范 1.标识符 定义:允许作为名字的有效字符串集合 名字必须有实际意义,可读性好 首字母必须是字母或下划线(_) 剩下的字符可以是字母和数字或者下划线 大小写敏感 两种风格:con ...

  7. Python的hasattr() getattr() setattr() 函数使用方法

    hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False.需要注意的是name要用括号括起来 &g ...

  8. gitlab改变服务器ip

    一./home/git/gitlab/config/unicorn.rb 其中的ip需要修改,否则unicorn无法启动. 二./home/git/gitlab-shell/config.yml 其中 ...

  9. sublime text 内调试Javascript代码

    转自:sublime内调试Javascript代码 之前用webstorm, 可以直接调试js, 在浏览器中也可以调试js,最近换了sublime text, 在想它是否支持调试js代码,于是找到了这 ...

  10. Tomcat几种出错方法

    1.  Several ports (8005, 8089, 8009) required by Tomcat v8.0 Server at localhost are already in use. ...