[javascript] TypeScript를 사용한 개방형 함수 인수

TypeScript 언어 의 주요 관심사 중 하나 인 IMO 는 기존의 바닐라 JavaScript 코드를 지원하는 것입니다. 이것은 내가 처음에 느꼈던 인상입니다. 완벽하게 유효한 다음 JavaScript 함수를 살펴보십시오.

참고 :이 접근 방식이 마음에 든다는 것은 아닙니다. 나는 이것이 유효한 JavaScript 코드라고 말하는 것입니다.

function sum(numbers) {

    var agregatedNumber = 0;
    for(var i = 0; i < arguments.length; i++) {
        agregatedNumber += arguments[i];
    }

    return agregatedNumber;
}

따라서이 함수를 여러 인수와 함께 사용합니다.

console.log(sum(1, 5, 10, 15, 20));

그러나 TypeScript Playground 로 이것을 시도 하면 컴파일 시간 오류가 발생합니다.

나는 이것이 버그라고 가정하고 있습니다. 호환성 문제가 없다고 가정 해 봅시다. 그렇다면 개방형 인수를 사용하여 이러한 유형의 함수를 작성하는 방법이 있습니까? paramsC #의 기능과 같은 ?



답변

이를 수행하는 TypeScript 방법은 ...인수 이름 앞에 줄임표 연산자 ( ) 를 배치하는 것 입니다. 위의 내용은 다음과 같이 작성됩니다.

function sum(...numbers: number[]) {
    var aggregateNumber = 0;
    for (var i = 0; i < numbers.length; i++)
        aggregateNumber += numbers[i];
    return aggregateNumber;
}

그런 다음 올바르게 입력합니다.

console.log(sum(1, 5, 10, 15, 20));


답변

@chuckj 답변 외에도 : arrow function expressionTypeScript ( lambdaJava / .NET에서 일종의)를 사용할 수도 있습니다.

function sum(...nums: number[]): number {
    return nums.reduce((a, b) => a + b, 0);
}


답변

Typescript에서는 Rest Parameter 의 개념으로 유사한 유형의 여러 값을받는 매개 변수입니다. typescript를 대상으로하는 경우 ECMAScript 6 표준 코드를 작성해야하며 typescript transpiler는이를 동등한 Java 스크립트 코드로 변환합니다 ( 이는 ECMAScript 5 표준입니다). typescript를 사용하면 함수 sum (… numbers : number [])과 같은 restparameter 변수 이름과 함께 3 개의 dot (…) preferx를 사용해야합니다.

참고 :
나머지 매개 변수는 매개 변수 목록의 마지막 매개 변수 여야합니다. 마찬가지로 함수 sum (name : string, age : number, … numbers : number []).


답변