typescript 파일에서 정의 파일없이 js 라이브러리를 가져 오는 방법
프로젝트가 커짐에 따라 코드 관리를 돕기 위해 JavaScript에서 TypeScript로 전환하고 싶습니다. 그러나 우리는 TypeScript로 변환하고 싶지 않은 많은 라이브러리를 amd 모듈로 활용합니다.
우리는 여전히 그것들을 TypeScript 파일로 가져오고 싶지만 정의 파일을 생성하고 싶지도 않습니다. 그것을 어떻게 달성 할 수 있습니까?
예 : 새로운 Typescript 파일 :
/// <reference path="../../../../definetelyTyped/jquery.d.ts" />
/// <reference path="../../../../definetelyTyped/require.d.ts" />
import $ = require('jquery');
import alert = require('lib/errorInfoHandler');
여기에 lib/errorInfoHandler
우리가 만지고 싶지 않은 거대한 JavaScript 라이브러리에 포함 된 amd 모듈이 있습니다.
위 코드를 사용하면 다음과 같은 오류가 발생합니다.
Unable to resolve external module ''lib/errorInfoHandler''
Module cannot be aliased to a non-module type.
실제로 다음 코드가 생성됩니다.
define(["require", "exports", "jquery", "lib/errorInfoHandler"], function(require, exports, $, alert) {
...
}
JavaScript 라이브러리를 amd 모듈로 TypeScript로 가져와 정의 파일을 만들지 않고 TypeScript 파일 내에서 사용하는 방법이 있습니까?
여기에 제공된 두 가지 답변의 조합이 저에게 효과적이었습니다.
//errorInfoHandler.d.ts
declare module "lib/errorInfoHandler" {
var noTypeInfoYet: any; // any var name here really
export = noTypeInfoYet;
}
나는 여전히 TypeScript에 익숙하지 않지만 이것은 TypeScript에 유형 정보가없는 더미 변수를 내 보내서 종료하도록하는 방법 인 것처럼 보입니다.
편집하다
이 답변에 대한 주석에서 단순히 다음을 선언하여 동일한 결과를 얻을 수 있음이 언급되었습니다.
//errorInfoHandler.d.ts
declare module "*";
다음 내용으로 고유 한 정의 파일을 생성하십시오.
declare module "lib/errorInfoHandler" {}
가져 오기를 사용하려는 위치에서이 파일을 참조하십시오.
또는 파일 맨 위에 다음 행을 추가하십시오.
/// <amd-dependency path="lib/errorInfoHandler">
참고 : 후자가 여전히 작동하는지 모르겠습니다. 처음에는 AMD 종속성이 누락 된 상태에서 작업했습니다. 이 방법을 사용하면 해당 파일에 대한 IntelliSense가 없습니다.
lib
라는 파일을 만듭니다 errorInfoHandler.d.ts
. 거기에 다음과 같이 작성하십시오.
var noTypeInfoYet: any; // any var name here really
export = noTypeInfoYet;
이제 alert
가져 오기가 성공하고 유형이 any
됩니다.
일반적으로 임시 빠른 솔루션 이 필요한 index.d.ts
경우 프로젝트 폴더의 루트에 new 를 정의하여 수행 할 수있는 다음 package.json
파일에 설명 된대로 모듈 이름을 만듭니다.
예를 들면
// somefile.ts
import Foo from '@awesome/my-module'
// index.d.ts on @awesome/my-module
declare module '@awesome/my-module' {
const bind: any;
export default bind;
}
'development' 카테고리의 다른 글
고성능 동시 MultiMap Java / Scala (0) | 2020.12.09 |
---|---|
TaskScheduler.Current가 기본 TaskScheduler 인 이유는 무엇입니까? (0) | 2020.12.09 |
Python 사전 액세스 코드 최적화 (0) | 2020.12.09 |
Xcode 작업 공간에서 프로젝트 간의 종속성을 어떻게 관리해야합니까? (0) | 2020.12.09 |
메모리 주문 "획득"과 "소비"는 어떻게 다르며 언제 "소비"가 선호됩니까? (0) | 2020.12.09 |