2016-10-11 4 views
0

es6의 가장 좋아하는 기능 중 하나는 destructuring 매개 변수를 사용할 수있는 기능입니다. 예를 들어 는 : 명시 적 유형은 인수 중 하나에 할당 할 필요가있을 때destructuring 매개 변수의 형식화 된 기본 인수

function example1({ 
    bar = -1, 
    transform = Math.abs 
} = {}) { 
    transform(bar); 
} 

그러나, 타이프 라이터 컴파일러 (예 : 그것에게 기본적으로 추정되는 것보다 더 큰 유연성을 제공) 오류를 생성합니다 :

: 나머지 매개 변수 유형을 추론 할 수있을 때 지나치게 복잡한 것 같다 -

type Formatter = { (n: number): (number | string) }; 

function example2({ 
    bar = -1, 
    transform: Formatter = Math.abs 
} = {}) { 
    // ERROR: cannot find name 'transform' 
    return transform(bar) + ' is the value'; 
} 

내가 찾은이 주변에있는 유일한 방법은 명시 적으로 매개 변수의 전체 집합을 입력하는 것입니다

생각하십니까? # 2의 단순성과 함께 # 3을 달성하는 구문이 있습니까?

답변

0
type Formatter = { (n: number): (number | string) }; 

function example2({ 
    bar = -1, 
    transform = Math.abs as Formatter 
} = {}) { 
    // ERROR: cannot find name 'transform' 
    return transform(bar) + ' is the value'; 
} 

기본 매개 변수를 사용할 때 유형 유추를 목표로합니다. 타입 정의가 없거나 자신 만의 타입 정의를 제공하고 싶다면 단순히 'variable as type'구문을 사용하십시오! :)

+0

흥미 롭습니다. 유형을 확장하는 유형 강요 기능에 대해서는 생각하지 않았습니다. 일반적으로 유형을 좁히는 데 사용되는 것을 보았습니다. 또한, destructuring 매개 변수는 적어도 'example3'과 같이 명시 적으로 타이핑하지 않아도 기본값 (필수 또는 선택 사항)없이 어떤 유형의 매개 변수도 포함 할 수 없다는 관련 문제가 있습니다. – bjnsn

관련 문제