2017-09-27 2 views
1

'중첩 된 형식 어설 션'이라고 생각되는 방식을 수행하는 방법을 찾으려합니다.Typescript - 중첩 된 여러 유형의 어설 션

Typescript를 사용하면 인터페이스를 통해 빈 객체를 어설 션하여 인터페이스의 유형으로 지정할 수 있습니다. 예를 들어 :

const fakeRequest = <ExpressCore.Request>{ protocol: 'test-protocol' }; 

하자 나 (https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/express-serve-static-core/index.d.ts#L177 속성 - 많은있다)을 ExpressCore.Request 유형 역할을하는 프로토콜 필드 세트 객체를 지정합니다. 이 메소드를 사용하여 Request 객체를 가져와 프로토콜에 대한 어설 션을 만들 때 편리하게 사용할 수 있습니다.

Generictype 'RequestAPI<TRequest, TOptions, TUriUrl> requires 3 type argument(s). 

내가 뭘 :

내가 예를 들어, 더 복잡한 인터페이스를 사용하여이 작업을 수행 할 때, 요청에 대해 제공되는 하나 - - https://github.com/request/request 컴파일러가 내게 말하길 나는 3 개 내부 유형을 제공해야 이것은 DefinitelyTyped를 통해 사용 가능한 @ types/request 타이핑을 사용한다. 하나의 내부 인터페이스를 필요로하는 인터페이스를 통해 객체를 주장하는 데 필요한 구문의

export interface RequestAPI<TRequest extends Request, TOptions extends CoreOptions, TUriUrlOptions> {

이 근무하는 데, 내가 찾은 예 : 선언 파일에서

는 RequestAPI는에 의해 정의된다

What means "Generic type 'Feature<T>' requires 1 type argument(s)" in Typescript?을 참조하십시오.

하지만 3 가지 내부 인터페이스로이 작업을 수행하는 방법을 알아낼 수는 없습니다. 아래의 시도는 실패했다 :

const foo = { {} as request.Request, {} as request.CoreOptions, {} as request.RequiredUriUrl } as request.RequestAPI; 

const fakeRequester = <request.RequestAPI<request.Request><request.CoreOptions><request.RequiredUriUrl>> {{}, {}, {}}; 

..

사람이 중첩 된 여러 주장을 처리하기 위해 또는 내가 잘못 것을 지적 할 수있는 방법을 알고있는 경우

은, 그것은 이해할 수있을 것입니다.

답변

1

제네릭 형식 매개 변수에 대해 약간의 독서를해야했지만 결국에는 가능했습니다.

무슨 일이 벌어 졌는지 알아보기 위해 나는 ts-node을 사용하고 서로를 확장 한 확장 된 작은 인터페이스와이를 일반 매개 변수로 사용한 다른 인터페이스를 구축했습니다.

결국 내 테스트에서 Request 개체를 조롱 할 수있었습니다. 예 :