zoukankan      html  css  js  c++  java
  • angular7 学习笔记记录--1. TypeScript基础

    一、 基础类型和声明 number; string,boolean; 

        //let 修饰变量。 [:] 冒号限定类型; 

      let  a : number;

      let  b : string;

      let c: string[];

      let d: boolean;

      let e = 'e';    直接赋值,自动转换类型;

     //元组 [限定类型]

      let tuple : [string, number];

      tuple = ['tom', 20];  // 只能按照类型赋值

     //const 修饰常量;也用来修饰对象实例化。

      const PI=3.1415926;

      const pers = new Person('tome','jerry', 12);

     //any 任意类型

      const result : any;

      const foo: any[];

     //void 无返回值

     function fn() : void { 

     }

     //枚举

     enum Color (RED, BLUE, GREEN)

     Color.RED

     

    二、接口: interface 约束类型的结构。

      interface Person {

      firstName: string;

      lastName: string;

      age: number; 

     }

    //调用demo

     function greeting(person : Person) {

      return person.firstName+' ' + person.lastName+' : ' + person.age;

     }

    const myname = greeting({firstName:'tom', lastName: 'hanks', age: 12});

    console.log(myname);

    三、类class

     1.基本用法(包含:属性,构造方法,其他方法)

      class Greeter {

      greeting: string;

      constructor(msg: string) {

        this.greeting = msg;

      }

      greet() {

        return 'Hello, ' + this.greeting;

      }

    }

    //调用demo

    const greet1 = new Greeter(' Angular world! ');

    console.log(greet1);

     2.继承

     class Animal {

      protected type : string;

      //当父类拥有构造方法时,子类必须调用之。

      constructor(type: string, public myname?: string='something') { // 问号代表可选参数

        this.type = type;

      }

      move(distance:number = 0) {  //参数缺省初值,使用等号

        console.log(this.myname + '[' + this.type + ']移动了' + distance + '米!');

      }

    }

    class Dog extends Animal {

      

      constructor(myname?: string='something') { // 问号代表可选参数

        super('dog', myname);

      }

      bark() {

        console.log('汪汪!');

      }

      move(distance: number=3) { //override

        console.log('do something'); 

        super.move(distance);  

      }

      move (a, b) { //overload

        return a+b;

      } 

    }

    const dog = new Dog('旺财');

    dog.bark();

    dog.move();

    dog.move(10);

    3.类型修饰符,访问范围同java, 多了readonly

      public, private, protected , readonly 

    * 特色:

      给构造方法参数加上修饰符, 构造方法的参数会自动定义并初始化为成员变量。

    //  construct ( private type: number) {

    }

    //然后类就有成员变量 type了。

    4.静态成员: static 关键字修饰。 同java使用习惯。

    5.存取器:使用 get  set 关键字

      private _type : string;  //前面用下划线开头。约定?

      get type():string {

        return 'abc';

      }

      set type(type:string) {

        this.type = type;

      }

    //

    obj.type = 'hello type';

    console.log(obj.type);

    四、函数

      1.函数的参数时必须的。

      2. 函数参数赋初值使用 func(name:string = 'default')

      3. 函数可选参数使用问号修饰 func(name ? :string)

    五、泛型

       1.  不用泛型:使用any

        function noGeneric(arg: any) :any {

          return arg;

        }

      2. 使用泛型; //T 称为类型变量。只标识类型,不代表值。

       a. 泛型方法:

       function useGeneric<T>(arg: T) : T {

          return T:

        }'

      //demo

      userGeneric<String>('abc');

      userGeneric(1);

      b. 泛型接口: demo

      interface Result<T, U> {

        success: boolean;

        data : T;

        data2?: U;

      }

      class User {

        id : number:

        name: string;

      }

      const r: Result<User> = {

        success: true;

        data: {id: 1, name: 'tom‘ }

      }

       c. 泛型类

       class Result<T> {

         constructor(public success: boolean, public data: T) {

          }

        }

      const r2 : Result<User> = new Result<User>(tue, {id:1, name: 'tome'});
      console.log(r2.success);

      console.log(r2.data);

      3. 泛型接口约束

      interface Lengthwise {

        length: number;

      } 

      //约束传参的对象必须带有length属性。

     function useGeneric<T extends Lengthwise> {

       return T;

      }

      //使用

      useGeneric({id:1, length: 30});

    六、模块:导入导出

       具名导出:export

      新建 myModule.ts

      export const HOST = 'http://localhost:4200';

      export class Foo {

      bar: string;

      }

      const Bar = 'bar';

      const abc = 'abc';

      export {Bar, abc as ooxxx};

        //使用别名: as 

      //默认导出, 导入时不用花括号

       export defult class User {

        id : number;

        name :string;

      }

      //导入,在文件写

      import User, {HOST, Foo, Bar as bar} from ./myModule  类似java

      console.log(HOST);

      const User u = new User();

      console.log(bar);

    ⑦: @ 关键字代表装饰器, 在类class, 或者变量上面。 类似java注解。

      后台机制,使用工厂模式,给当前类增加装饰内容。

      @NgModule({})

      export class AppModule() {

      }

      实际上:

      NgModule(cfg)(AppModule);

     小练一手:学生端:用户登录、注册

      使用命令:  ng   g  c login

      1.创建登录组件 login

      2. 创建注册组件 register

      3.增加路由

        3.1 声明路由

        const routes : Routes = [{path, component}, ....]

        3.2 导入路由模块:

        imports: [

          RouterModule.forRoot(routes)

        ]

      4.放入路由插座,写。

        <router-outlet></router-outlet>

      5. index界面增加路由连接

         <a routerLink="login"  routerLinkActive="active">登录</a>

         <a routerLink="register"  routerLinkActive="active">注册</a>

    最后,TypeScript 说是ES6的超集,其实时微软照C#搞的一套东西,很JAVA.

  • 相关阅读:
    centos7 双网口绑定
    centos docker 修改默认存储路径
    Django 操作已经存在的数据库
    package ‘RPMM’ is not available (for R version 3.6.0)
    关于tornado的raise gen.Retuen()
    tornodo学习之路
    关于微信小程序登录机制
    关于微信小程序更新机制
    过渡结束事件
    移动端动效
  • 原文地址:https://www.cnblogs.com/java2sap/p/13082865.html
Copyright © 2011-2022 走看看