2016-11-28 11 views
0

내가 사용타사 라이브러리에 대한 import 문을 require로 변환하는 방법은 무엇입니까? 내 타이프 라이터 프로젝트에서

const program = require('commander'); 
const figlet = require('figlet'); 
const AWS = require('aws-sdk'); 

내가 대신 tslint의 no-var-requires 규칙을 준수하기 위해 import를 통해 일을 그 라인을 리팩토링하고 싶다. 그러나 일할 수있는 방법은 나를 피합니다. 나는이 얻을 아직

import figlet from 'figlet'; 
import * as figlet from 'figlet'; 

:

bin/console.ts(1,20): error TS2307: Cannot find module 'figlet'. 

가 어떻게이 라이브러리를 가져올 생각입니다

는 figlet, 나는 모두를 시도?

답변

1

중요한 것은 TypeScript가 당신이 참조하고있는 모듈을 찾을 수 있어야한다는 것입니다. 그래서 당신의 타입을 점검 할 수 있습니다. 더 자세한 정보없이 프로젝트에서 정확하게 수행하는 방법을 알기는 어렵지만 일반적으로 원하는 JavaScript 라이브러리의 유형 정의를 설치하는 것이 좋습니다.

기존에없는 JavaScript 라이브러리의 유형 정의를 설치하는 가장 쉬운 방법은 인프라는 대개 npm입니다. 예를 들어 aws-sdk의 경우 npm install --save @types/aws-sdk을 실행하면 프로젝트 내의 node_modules/@types/aws-sdk에 유형 정의가 다운로드되고 TypeScript 컴파일러가 자동으로 해당 유형을 찾습니다. 따라서 aws-sdk를 가져 오면 진행 상황을 알 수 있습니다.

사령관도 마찬가지입니다. 그러나 Figlet에는 게시 된 선언 파일이없는 것으로 보이므로 직접 작성해야합니다. 당신도 실제로 형태를 기술, 또는 명시 적으로 모듈에게 any 유형을 제공 할 수 있습니다 형태를 기술하는

  • 더 복잡하지만 좋은 방법이 동작하는 방법을 이해합니다. 핸드북에있는 type declarations section을 읽어보십시오. 다른 기존 유형 정의 (대부분은 DefinitelyTyped repo에 있음)를 살펴보면이 사실을 파악하는 또 다른 좋은 방법입니다.

  • 명시 적으로 any 유형을 지정하고 문제를 무시하면 훨씬 쉬울 것이지만, figlet을 사용할 때 어떤 유형 시스템 지원도받지 못합니다. 프로젝트에 figlet.d.ts 파일을 만들고 그 안에는 declare module "figlet";을 넣으면됩니다. 이것은 shorthand ambient module이며 성공적으로 figlet을 가져올 수있을만큼 충분해야합니다.

은 자세한 내용은 수첩에 consuming declaration filesmodule resolution generally를 살펴 보자.