2017-12-26 14 views
0

기존 인터페이스를 보강하기 위해 사용자 정의 유형 정의가 있습니다 (은 here과 같습니다). 내용물 express.d.ts :Typescript 사용자 정의 유형 정의가 가져 오기 클래스에서 깨졌습니다.

declare namespace Express { 
    export interface Request { 
    name: string 
    } 
} 

잘 작동합니다. 하지만 문자열 대신 name 대신 사용자 정의 클래스 MyClass이 필요합니다.

export class MyClass { 
    first: string; 
    last: string; 
} 

나는에 대한 인터페이스의 확대를 변경 : 클래스 정의의 모양

req.name에 액세스 할 때
import { MyClass } from "../routes/myClass"; 
declare namespace Express { 
    export interface Request { 
    name: MyClass 
    } 
} 

이제 다음과 같은 오류가 발생합니다 : 내가 발견 한

error TS2339: Property 'name' does not exist on type 'Request'. 

, 내 express.d.ts은 실제로 추가 된 import 문으로 인해 "모듈"이됩니다. 아직도, 내가 그 문제를 어떻게 극복 할 수 있는지 분명하지 않다.

+0

이 파일은 모듈 파일과 더 이상 글로벌 네임 스페이스 익스프레스를 확장하지 않습니다. – unional

답변

1

주석에 언급 된 바와 같이, 파일에서 최상위 가져 오기 또는 내보내기를 수행하면 파일의 최상위 범위가 전역 범위와 분리 된 모듈 범위가됩니다.

이 모듈에 글로벌 선언을 수정하려면 글로벌 네임 스페이스에 Express을 참조 declare global를 사용해야합니다 : 당신이 최고 수준의 가져 오기/내보내기 문이 때

import { MyClass } from "../routes/myClass"; 
declare global { 
    namespace Express { 
    export interface Request { 
     name: MyClass 
    } 
    } 
} 
관련 문제