class Site{  name():void{    console.log('test')  }}var obj = new Site()console.log(obj.name())/** * 如果某个属性的值是计算出来的 * 那么它前面一位的成员必须要初始化值 * **/const getValue=()=>{  return 1}enum objlist {  a=getValue(),  b=2,  c,  d}console.log(objlist)/** * ts变量申明 * var [varname]:[vartype]=[varvalue]; * var [varname]:[vartype]; * var [varname]=[varvalue]; * var [varname]; * TypeScript 遵循强类型,如果将不同的类型赋值给变量会编译谬误 * **/// var num:number = "hello"     // 这个代码会编译谬误/** * 类型断言 type assertion * 用来手动指定一个值的类型,即容许变量从一种类型更改为另一种类型 * <type>value * 或者 value as type * 类型也不能随便更改,须要满足映射关系 * **/var str:any = "string1";var str2:number = str as any;console.log(str2)/** * 类型推断 * 当类型没有给出时, * TypeScript 编译器利用类型推断来推断类型。 * 如果因为不足申明而不能推断出类型, * 那么它的类型被视作默认的动静 any 类型 * **/var num = 2;    // 类型推断为 numberconsole.log("num 变量的值为 "+num); // num = "12";    // 编译谬误console.log(num);/** * 变量作用域 * 全局作用域、类作用域(class)、部分作用域(代码块,比方办法) * **/var global_val = 'global'; //全局作用域class Numbers { //类  num_val=1; //类作用局,new进去的实例可拜访,  static static_val =2;//类作用局,动态变量,类可拜访该动态变量则可拜访,  store_val():void{//类作用局    var local_val = 3 //部分作用域,仅new出实体后以实体进行拜访  }}var obj3= new Numbers()console.log("全局变量",global_val);console.log("类作用域,动态变量static_val",Numbers.static_val);console.log("类作用域,num_val、store_val() 不可拜访");console.log("类作用域,num_val");console.log("类作用局",obj3.num_val);console.log("类作用局",obj3.store_val());/** * 残余参数 * 不晓得要向函数传入多少个参数,这时候咱们就能够应用残余参数来定义。 * 残余参数语法容许咱们将一个不确定数量的参数作为一个数组传入。 * function buildName(...restOfName: string[]) * **/  /**  * 递归函数  * **/ function factorial(number) {  if (number <= 0) {         // 进行执行      return 1;   } else {           return (number * factorial(number - 1));     // 调用本身  } }; console.log(factorial(6));  /** * lambda箭头函数 * **///( [param1, parma2,…paramn] )=> {  // 代码块//}/** * 元组:既数组中元素类型能够不一样 * **/ /**  * 联结类型  * var valname : type1|type2...  * 一个变量能够同时为多种类型  * **/  /**   * ts接口   * 一系列形象办法的申明,是一些办法特色的汇合   * 这些办法都应该是形象的,须要由具体的类去实现   * 而后第三方就能够通过这组形象办法调用,让具体的类执行具体的办法   * 相似于gql的接口   * 不是传统意义的api   * **//** * 变量customer定义为IPerson类型,则custom能够应用IPerson中定义的任意变量 * 同时customer还能够定义IPerson定义的变量以外的其余变量名 * **/interface IPerson {   firstName:string,   lastName:string,   sayHi: ()=>any }  var customer:IPerson = {   firstName:"Tom",  lastName:"Hanks",   sayHi: ():number =>{return 1} }/** * 联结类型和接口 * commandline能够是string类型的数组,能够是独自的string,能够是一个办法(返回值为string) * interface RunOptions {     program:string;     commandline:string[]|string|(()=>string); }  * **//** * 接口和数组 * 接口中咱们能够将数组的索引值和元素设置为不同类型,索引值能够是数字或字符串 * **/ interface namelist {   [index:number]:string } /** * 接口和继承 * 接口能够通过其余接口来扩大本人 * Child_interface_name extends super_interface_name * 容许多接口继承,各个接口应用逗号 ',' 分隔。 * Child_interface_name extends super_interface1_name, super_interface2_name,…,super_interfaceN_name * 关键字为:extends * **/interface Person {   age:number } interface Musician extends Person {   instrument:string } // var drummer:Musician={//   age:12,//   instrument:"s"// }; // 应用类型断言,否则须要设定初始值var drummer = <Musician>{};drummer.age = 27 drummer.instrument = "Drums" console.log("年龄:  "+drummer.age)console.log("喜爱的乐器:  "+drummer.instrument)/** * 类 class * 蕴含:字段,构造函数,办法 * 构造函数与办法有什么区别?? * 构造函数是否相似于函数初始化? * 类能够继承 * 子类除了不能继承父类的公有成员(办法和属性)和构造函数,其余的都能够继承 * 访问控制修饰符: * public(默认):私有,能够在任何中央被拜访 * protected:受爱护,能够被其本身以及其子类和父类拜访 * private:公有,只能被其定义所在的类拜访 * **/ class Car {   // 字段   protected s1='sd'  engine:string;   // // 构造函数   constructor(engine:string) {       this.engine = engine   }    // 办法   disp(a):void {       console.log("发动机为 :   "+this.engine)       console.log(a)  } }var cars= new Car("1");// console.log(Car.s1)/** * 类继承 * **/ class Shape {   Area:number     constructor(a:number) {      this.Area = a   } } class Circle extends Shape {   disp():void {      console.log("圆的面积:  "+this.Area)   } } var obj5 = new Circle(1); obj5.disp()/** * 命名空间:namespace关键字 * 定义:namespace SomeNameSpaceName * 应用:SomeNameSpaceName.SomeClassName; * 命名空间可嵌套 * **/ namespace SomeNameSpaceName {   export interface ISomeInterfaceName {      }    export class SomeClassName {      }  }