반응형
변수 인수 수가 있는 함수의 TypeScript 유형 시그니처
가변적인 양의 인수를 받아들이는 함수 멤버와의 인터페이스를 정의하는 데 문제가 있습니다.다음 오브젝트 리터럴을 예로 들어 보겠습니다.
var obj = {
func: () => {
for(var i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
}
}
};
다음과 같은 인터페이스를 정의할 수 있으면 좋겠습니다.
interface IExample {
func: ( ??? ) => void;
}
다음 코드를 오류 없이 컴파일할 수 있도록 합니다.
var test = (o: IExample) {
o.func("a");
o.func("a", "b");
o.func("a", "b", "c");
...
}
TypeScript는 ECMAScript 6 스프레드 제안을 사용합니다.
유형 주석을 추가하면 다음과 같이 됩니다.
interface Example {
func(...args: any[]): void;
}
Chuck의 답변에 덧붙이자면 인터페이스가 그렇게 정의되어 있을 필요는 없습니다.그냥 하면 돼요....
메서드에 직접 입력:
class Header { constructor(public name: string, public value: string) {} }
getHeaders(...additionalHeaders: Header[]): HttpHeaders {
let headers = new HttpHeaders();
headers.append('Content-Type', 'application/json')
if (additionalHeaders && additionalHeaders.length)
for (var header of additionalHeaders)
headers.append(header.name, header.value);
return headers;
}
그러면 다음과 같이 할 수 있습니다.
headers: this.getHeaders(new Header('X-Auth-Token', this.getToken()))
또는
headers: this.getHeaders(new Header('X-Auth-Token', this.getToken()), new Header('Something', "Else"))
...args[] 인수를 사용하지 않으면 Typescript는 Javascript에 배열을 만들고 인수를 복사합니다.
이러한 불필요함을 피하기 위해 기능뿐만 아니라 기능의 프로토타입을 만들 수 있습니다. 따라서 다음과 같습니다.
function format_n(str: string, ... $n: any[]): string;
function format_n(str: string): string {
return str.replace(/%(\d+)/g, (_, n) => format_n.arguments[n]);
}
언급URL : https://stackoverflow.com/questions/12739149/typescript-type-signatures-for-functions-with-variable-argument-counts
반응형
'sourcetip' 카테고리의 다른 글
html 양식 데이터를 사용하여 JSON 개체를 보내는 방법 (0) | 2023.02.09 |
---|---|
Spring Boot 의존관계에서 application.properties를 상속합니다. (0) | 2023.02.09 |
AngularJS의 'ng-filter'는 최대 1000개의 요소 배열에서 매우 느립니다. (0) | 2023.02.09 |
번역 날짜("d F Y (H:i) 함수 php (0) | 2023.02.09 |
$state와 함께 $state 메서드 사용Angular UI 라우터의 ChangeStart to State 및 fromState (0) | 2023.02.09 |