TypeScript 노트 요약
                                            
 12629 단어  typescriptvue.js프런트엔드
                    
서문 소개
일반 유형
기초편은 빠르게 넘어가서...
  let s: string = 'i am string'    let n: number = 1    let b: boolean = true    // undefined             undefined
  // null             null
  //           
  let ud: undefined = undefined
  let nu: null = null    //          void
  //      void            undefined   null
  const popup = (): void => {
    console.log('function no return')
  }
  let useless: void = undefined    //         ,              any
  let anyType: any = 'str'    let uk: unknown;
  // unknown   any        unknown        :
    unknown             ,             ,      as  
      any           ,          。
  //   unknown             ,                   let arr1: (number | string)[] = [1, 2, 3, '2121']
  let arr2: Array = [2, 2, 2, true]     //                 ,          ;      
  //                    
  let t1: [string, number, boolean | string]
  t1 = ['hello', 123, false]    //          
  // never  :                                   
  //         never        ,         
  const err = (msg: string): never => {
    throw new Error(msg)
  }
  // err('hahaahah')    let ss: symbol = Symbol('hello')
  console.log(ss)    let obj: {name: string, value: number} = { name: 'huhua', value: 1232 }
  let obj1: object = { name: '  ', value: 1232 }
  console.log(obj, obj1, obj.name)
  // console.log(obj1.name) // name    object      let myAdd = (x: number, y: number): number => x + y
  let add = (x: number, y: number) => x + y //     ,          
  console.log(myAdd(1, 2), add(3, 100))
  let compute: (x:number, y:number) => number   //       
  compute = (aaa, bbb) => aaa + bbb  열거 유형enum
매거: 우리는 상량의 집합으로 이해할 수 있고 하드코딩 문제, 특히if문장의 판단값을 해결하는 데 도움을 줄 수 있다.
export enum EState {
  one = 1,
  two,
  three,
  four,
  five,
  six,
  seven
}
      : EState['one'] === 1; EState[1] === 'one'
          ;                  enum Direction {
  Up = 'Up',
  Down = 'Down',
  Left = 'Left',
  Right = 'Right'
}
console.log(Direction['Right'], Direction.Up); // Right Up  enum StrNum {
  n = 0,
  y = 'yes'
}  //                 ,     
const enum Direction {
  Up = 'Up',
  Down = 'Down',
  Left = 'Left',
  Right = 'Right'
}
const up = Direction.Up
console.log(up)  인터페이스 인터페이스
인터페이스(Interfaces)는 대상의 형상(Shape)을 설명하는 데 사용됩니다. 인터페이스는 일반적으로 우리가 정의한 대상, 함수, 클래스의 구조와 유형을 제약하는 데 사용됩니다.
//      ,                 (       ,       )
interface Person {
  readonly id: number //     
  name: string
  age: number
  sex?: string //     
  [key: string]: any //      ,       ;       any    
}           ,            
interface Func {
  (x: number, y: number): number
}
let addSum1: Func
addSum1 = (a, b) => a + b  //              ,         ,      (implements)
//                ;            
//              public
//             
interface Man {
    name: string
    age: number
}
class Huhua implements Man {
    //         
    name!: string //     
    age!: number
    constructor(name: string, age: number) {
        this.name = name
        this.age = age
    }
    eat() {
        console.log('eat food')
    }
}  //       
interface Alarm {
    alert();
}
interface LightableAlarm extends Alarm {
    lightOn();
    lightOff();
}
//      
class Point {
    x: number;
    y: number;
}
interface Point3d extends Point {
    z: number;
}
let point3d: Point3d = {x: 1, y: 2, z: 3};  함수 유형
// function   
function add(a:number, b: number) {
  return a + b
}
//       ,        
let add: (a: number, b: number) => number
type Add: (a: number, b: number) => number
interface IAdd {
  (a: number, b: number): number
}  //     ,     ,     :     
function add(a: number, b = 100, c?: number) {
  return c ? a + b + c : a + b
}
function add(x: number, ...rest: number[]) {
  return x + rest.reduce((pre, acc) => pre + acc)
}           ,               ,     
function add(...rest: number[]): number
function add(...rest: string[]): string
function add(...rest: any[]): any {
  let first = rest[0]
  if (typeof first === 'string') {
    return rest.join('')
  }
  if (typeof first === 'number') {
    return rest.reduce((pre, acc) => pre + acc)
  }
}  클래스 유형class
ts는 주로 구성원의 유형 주석과 구성원 수식자를 추가한다.ES6에서 클래스의 데이터 유형은 바로 함수이다. 클래스 자체가 구조 함수를 가리키는데 그 방법은 모두 구조 함수의protype 속성에 정의된다.우리는 ClassName을 통과할 수 있습니다.prototype.xxx 방문
class Car {
  //     :          
  _wheel: number = 4
  //          :         ( this)
  constructor(name: string) {
    this.name = name
  }
  //     
  readonly oil: string = '  '
  // public    :           
  public name: string = 'car'
  //     
  run() { console.log(this.name + 'runing...') }
  //     :              
  private priv() { console.log('priv') }
  //      :                    
  protected pro() {}
  //     :               
  static seats: string = '  '
}
let bz = new Car('benz') //    new     
let bm: Car = new Car('bm') //     
console.log(Car.seats)  class Bmw extends Car {
  constructor(name: stirng, public color: string) {
    //         
    super(name)
    this.color = color
  }
}
console.log(Bmw.seats)  abstract class Animal {
  // abstract                         
  abstract say(): void;
  move(): void {
    console.log('i can move')
  }
}
class Dog extends Animal {
  //          ,                ;        
  say() {
    console.log('   ');
  }
}
let dog1 = new Dog()
dog1.say() //    
dog1.move() // i can move                 ,              (interfaces),  implements       
//                (         );            
//              public
//             
interface Alarm {
    alert();
}
interface Light {
    lightOn();
    lightOff();
}
class Car implements Alarm, Light {
    alert() {
        console.log('Car alert');
    }
    lightOn() {
        console.log('Car light on');
    }
    lightOff() {
        console.log('Car light off');
    }
}  범형(유형에 대한 전삼에 해당)
범형: 함수, 인터페이스, 클래스를 정의할 때 구체적인 유형을 미리 지정하지 않고 사용할 때 유형의 특성을 다시 지정합니다.선언과 동시에 유형 변수의 유형 값을 지정합니다.
// 1.    
//   T           any  
//                     any     
function log(v: T): T {
  return v;
}
let s: string = "generics";
let a = log(s);
console.log(a);
console.log(log(1111));
// 2.      
//     ,                  type     。
// type Log = (v: T) => T //     
interface Log {
  (v: T): T;
}
let myLog: Log = log;
console.log(myLog([1, 2, 3]));
// 3.    
//                    
//         
interface IGeneric {
  (v: T): T;
}
let IG1: IGeneric = log;
console.log(IG1(123));
// 4.   
class GenericNumber {
  //               
  // zeroValue: T = T;
  add(x: T, y?: T) {
    console.log(x);
    return x;
  }
}
let myGenericNumber = new GenericNumber();
myGenericNumber.add(1);
let myG1 = new GenericNumber();
myG1.add("hello ts generics");
// 5.    
interface Length {
  length: number;
}
// T  Length  ,              length     value.length      
function ggg(value: T): T {
  console.log(value, value.length);
  return value;
}
ggg('hello')
ggg([1, 2, 3])          이론 진급편
ts 유형 검사 메커니즘
1.instanceof
if (c instanceof A) c.a 
2.in
if (c in C) c.a
3.typeof
          
if (typeof arg === 'string') {} else {}
4.        
     결합, 교차, 색인 유형
//          ;
//          K keyof T:        ;
//           T[K]; 
//      T extends U
interface IObj {
  a: string
  b: number
}
let key: keyof IObj
let k: IObj['a']
let iobj = {
  a: 1,
  b: 2,
  c: 'ccc'
}
//       
function getObjValue(obj: T, keys: K[]): T[K][] {
  return keys.map(key => obj[key])
}
console.log(getObjValue(iobj, ['a', 'c']));
// console.log(getObjValue(iobj, ['a', 'd']));      공정 실천 편
이것은 우리가 정식 개발에서ts를 사용하는 기교와 규범에 대한 설명이다
tsconfig.json
//ts 프로젝트 프로필 설명https://segmentfault.com/a/11...http://www.typescriptlang.org...
선언 파일 xxx.d.ts
declare var       
declare function       
declare class      
declare enum         
declare namespace   (      )    
declare interface   type       
export     
export namespace   (      )  
export default ES6     
export = commonjs     , import xx = require('xxx')
export as namespace UMD        
declare global       
declare module       ts 도구 클래스 (일반)
type Partial = { [P in keyof T]?: T[P] };
type p = Partial   type T = Exclude<1 | 2, 1 | 3> // -> 2  type Foo = Omit // -> { age: number }  개발한 기교들
업데이트 예정...
질문
본인은 vue 프로젝트에서 먼저 사용했는데 지원이 좋지 않은 것 같아서...하지만 이를 악물고 한 항목을 완성했고, 후속으로react에서 사용할 예정입니다.
https://github.com/vuejs/vue-docs-zh-cn/tree/master/vue-class-component
 vue-property-decorator: https://github.com/kaorun343/vue-property-decorator
 vuex-class: https://github.com/ktsn/vuex-class
 vuex-module-decoratorshttps://github.com/championswimmer/vuex-module-decorators
      =>   value
        as    => value as string
    (this.$refs['multiTable'] as any).clearSelection()
    (this.$refs['downParams'] as Form).resetFields()       ((this.$refs.saveTagInput as Vue)['$refs'].input as HTMLInputElement).focus()  이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Typescript 팁: 브랜드 유형을 사용하면 더 안전한 기능을 사용할 수 있습니다.다음과 같은 함수가 있다고 상상해 보십시오. 페이지 번호는 음수가 될 수 없기 때문에 분명히 잘못된 것입니다. 간단한 해결책은 다음과 같은 줄을 추가하는 것입니다. 그러나 음수로 함수를 호출하려고 할 때 유형 오류가...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.