TypeScript 기본 입문 자 바스 크 립 트 파일 형식 검사 (5)

4163 단어
전송 \ # \ # TypeScript 기본 입문 자 바스 크 립 트 파일 형식 검사 (5)
이전 글 계속 하기 [TypeScript 기반 입문 자 바스 크 립 트 파일 형식 검사 (4)]
@constructor
컴 파일 러 는 이 속성 할당 값 에 따라 구조 함 수 를 추정 하지만 @ constructor 표 시 를 추가 하면 더욱 엄격 하고 좋 은 제안 을 검사 할 수 있 습 니 다.
/**
 * @constructor
 * @param {number} data
 */
function C(data) {
  this.size = 0;
  this.initialize(data); // Should error, initializer expects a string
}
/**
 * @param {string} s
 */
C.prototype.initialize = function (s) {
  this.size = s.length
}

var c = new C(0);
var result = C(1); // C should only be called with new

@ constructor 를 사용 하여 구조 함수 C 에서 검사 합 니 다. 따라서 초기 화 방법 에 대한 조언 을 받 을 수 있 습 니 다. 숫자 를 전달 하면 오류 가 발생 할 수 있 습 니 다.구조 가 아 닌 C 를 호출 하면 오류 가 발생 할 수 있 습 니 다.
불 행 히 도 호출 가능 한 구조 함수 가 @ constructor 를 사용 할 수 없다 는 뜻 이다.
@this
컴 파일 러 가 일부 문맥 을 사용 할 수 있 을 때, 그것 은 보통 그것 의 유형 을 찾 을 수 있다.없 으 면 @ this 현식 으로 이 종 류 를 지정 할 수 있 습 니 다.
/**
 * @this {HTMLElement}
 * @param {*} e
 */
function callbackForLater(e) {
    this.clientHeight = parseInt(e) // should be fine!
}

@extends
자바 script 클래스 가 유 니 버 설 기본 클래스 를 확장 할 때 형식 매개 변 수 를 지정 할 곳 이 없습니다. @extends 표 시 는 이 유형의 매개 변수 에 위 치 를 제공 합 니 다:
/**
 * @template T
 * @extends {Set}
 */
class SortableSet extends Set {
  // ...
}

@ extends 는 클래스 에 만 적 용 됩 니 다.현재 구조 함 수 는 종 류 를 확장 할 방법 이 없다.
@enum
@ enum 표 시 는 대상 문 자 를 만 들 수 있 습 니 다. 구성원 은 모두 지정 한 형식 입 니 다.자 바스 크 립 트 의 대부분의 대상 문자 와 달리 다른 구성원 은 허용 되 지 않 습 니 다.
/** @enum {number} */
const JSDocState = {
  BeginningOfLine: 0,
  SawAsterisk: 1,
  SavingComments: 2,
}

@ enum 은 Typescript 의 매 거 진 것 과 완전히 다 르 고 훨씬 간단 합 니 다.그러나 Typescript 의 매 거 진 것 과 달리 @ enum 은 모든 유형 을 가 질 수 있 습 니 다.
/** @enum {function(number): number} */
const Math = {
  add1: n => n + 1,
  id: n => -n,
  sub1: n => n - 1,
}

더 많은 예시
var someObj = {
  /**
   * @param {string} param1 - Docs on property assignments work
   */
  x: function(param1){}
};

/**
 * As do docs on variable assignments
 * @return {Window}
 */
let someFunc = function(){};

/**
 * And class methods
 * @param {string} greeting The greeting to use
 */
Foo.prototype.sayHi = (greeting) => console.log("Hi!");

/**
 * And arrow functions expressions
 * @param {number} x - A multiplier
 */
let myArrow = x => x * x;

/**
 * Which means it works for stateless function components in JSX too
 * @param {{a: string, b: number}} test - Some param
 */
var sfc = (test) => 
{test.a.charAt(0)}
; /** * A parameter can be a class constructor, using Closure syntax. * * @param {{new(...args: any[]): object}} C - The class to register */ function registerClass(C) {} /** * @param {...string} p1 - A 'rest' arg (array) of strings. (treated as 'any') */ function fn10(p1){} /** * @param {...string} p1 - A 'rest' arg (array) of strings. (treated as 'any') */ function fn9(p1) { return p1.join(); }

알려 진 모드 는 지원 되 지 않 습 니 다.
인용 값 공간의 대상 은 형식 이 작용 하지 않 기 때문에 대상 도 구조 함수 와 같은 유형 을 만 들 지 않 는 다.
function aNormalFunction() {

}
/**
 * @type {aNormalFunction}
 */
var wrong;
/**
 * Use 'typeof' instead:
 * @type {typeof aNormalFunction}
 */
var right;

대상 텍스트 형식의 속성 형식의 Postfix 는 선택 할 수 있 는 속성 이 지정 되 지 않 은 것 과 같 습 니 다.
/**
 * @type {{ a: string, b: number= }}
 */
var wrong;
/**
 * Use postfix question on the property name instead:
 * @type {{ a: string, b?: number }}
 */
var right;

strictNullChecks 를 사용 하면 빈 형식 만 의미 가 있 습 니 다.
/**
 * @type {?number}
 * With strictNullChecks: true -- number | null
 * With strictNullChecks: off  -- number
 */
var nullable;

비어 있 지 않 은 형식 은 아무런 의미 가 없 으 며 원본 형식 으로 여 겨 집 니 다.
/**
 * @type {!number}
 * Just has type number
 */
var normal;

JSdoc 의 형식 시스템 과 달리 Typescript 은 null 을 포함 하거나 null 을 포함 하지 않 는 것 으로 만 형식 을 표시 할 수 있 습 니 다.명확 한 비 공 성 이 없습니다. - strictNullChecks 를 사용 하면 number 가 비 어 있 으 면 안 됩 니 다.그것 이 닫 히 면 number 는 비어 있 을 수 있 습 니 다.

좋은 웹페이지 즐겨찾기