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 는 비어 있 을 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.