나는 타이프 스크립트를 시도하고있다. hello world 무대에서 잘 작동합니다. 이제 npm 모듈을 사용하려고합니다.
index.ts
=
import _ = require('lodash')
console.log(_.toUpper('Hello, world !'))
작동하지 않습니다.
tsc index.ts
->Cannot find module 'lodash'. (2307)
node-ts index.js
->Cannot find module 'lodash'. (2307)
typescript 문서와 Google을 보면 도움이되지 않았습니다. 다른 S / O 질문은 답변되지 않았거나 ( 여기 및 여기 ) 관련이 없습니다.
요소 :
- typescript 1.8 최신
- 예, lodash가 설치되어
npm i --save lodash
있고 내 파일 시스템에 있습니다 (선택됨). - 나도했다
typings i --save lodash
- 변형
import * as _ from 'lodash'
또는const _ = require('lodash')
작동하지 않음 - 나는 다른 답변에 제안 tsconfig.json 옵션을 조정 시도
"moduleResolution": "node"
하고"module": "commonjs"
여전히 작동하지 않는, 어떤 답변에 제안
typescript에서 npm 패키지를 어떻게 사용합니까?
답변
[편집]이 답변에 감사드립니다! 그러나 2018 년 현재 구식입니다. 독자 여러분, 다른 답변을 살펴보십시오.
npm에서 모듈을 가져 오는 방법에는 여러 가지가 있습니다. 그러나 타이핑을 얻지 못하면 tsc
항상 필요한 모듈을 찾을 수 없다고 불평합니다 (트랜스 파일 된 js 가 실제로 작동 하더라도 ).
-
입력이 있고를 사용하지 않는 경우
tsconfig.json
를 사용reference
하여 입력을 가져옵니다./// <reference path="path/to/typings/typings.d.ts" /> import * as _ from 'lodash`; console.log(_.toUpper('Hello, world !'))
-
tsconfig.json
파일을 사용하는 경우 타이핑 파일이 포함되어 있는지 (또는 선택 사항이 제외되지 않았는지) 확인import
하고 이전 예제 에서 와 같이 만드십시오 .
사용 가능한 타이핑이없는 경우. 두 가지 선택이 있습니다. .d.ts
파일에 직접 작성 하거나 라이브러리에 대한 유형 검사를 무시하는 것입니다.
유형 검사를 완전히 무시하려면 (권장되지 않는 방법) 유형의 변수에서 라이브러리를 가져옵니다 any
.
const _: any = require('lodash');
console.log(_.toUpper('Hello, world !'))
tsc
require
존재하지 않는다고 불평 할 것입니다 . node
타이핑을 제공 하거나 declare
오류를 삭제합니다.
답변
[2018/12] 2016 년에 제가 물었던이 질문에 대한 새로운 최신 답변입니다. 답변은 구식 임에도 불구하고 여전히 많은 활동을 보여줍니다.
간단히 말해서 TypeScript는 패키지의 코드에 대한 유형 정보 (일명 ” 유형 선언 파일 “일명 “유형”)를 필요로하며 그렇지 않으면 TypeScript의 전체 요점을 잃게 될 것이라고 정당하게 알려줍니다. 이러한 솔루션을 제공하거나 옵트 아웃 할 수있는 몇 가지 솔루션이 여기에 모범 사례 순서대로 나열되어 있습니다.
솔루션 0 : 모듈이 이미 타이핑을 제공합니다. package.json에 다음과 같은 줄이 포함되어있는 경우 :
"typings": "dist/index.d.ts",
이미 TypeScript를 사용할 수 있습니다. 이 페이지를 읽고있는 경우에는 해당되지 않을 가능성이 높으므로 계속하겠습니다.
해결 방법 1 : DefinitelyTyped 에서 커뮤니티 제공 입력을 사용 합니다. 모듈 “foo”의 경우 다음을 시도하십시오.
npm add -D @types/foo
작동하면 대박! 이제 타이핑을했고 모듈을 사용할 수 있습니다. npm이 @ types / foo 모듈을 찾을 수 없다고 불평하면 계속합시다 …
해결 방법 2 :이 모듈에 대한 사용자 지정 입력을 제공합니다. (제로 노력을 할 수있는 옵션 포함)
- 프로젝트의 루트에 “typings-custom”이라는 폴더를 만듭니다.
- tsconfig.json에서이 폴더의 내용을 참조하십시오.
"include": [
"./typings-custom/**/*.ts"
]
- 다음과 같은 정확한 이름으로 파일을 생성합니다. foo.d.ts [foo = 모듈 이름] 콘텐츠와 함께 :
declare module 'foo'
TypeScript 코드는 이제 유형 정보가 없지만 컴파일되어야합니다 (TypeScript는 “any”유형의 foo 모듈을 고려함).
공식 문서 및 / 또는 DefinitelyTyped의 예제를 보고 유형 정보를 직접 작성해 볼 수도 있습니다 . 그렇다면 모듈 (모듈 작성자가 수락하는 경우 솔루션 0)에 직접 입력하거나 DefinitelyTyped (솔루션 1)에 입력하는 것을 고려하십시오.
답변
선언 파일이 누락되었을 수 있습니다.
자세한 내용은 DefinitelyTyped 를 참조하세요.
이 시도:
npm install --save lodash
npm install --save @types/lodash
이제 가져올 수 있습니다.
import _ from 'lodash';
가져 오는 모듈에 여러 내보내기가있는 경우 다음을 수행 할 수 있습니다.
import { Express, Router } from 'express';
가져 오는 모듈에 “기본 내보내기가 없음”인 경우 다음을 수행해야합니다.
import * as http from 'http';
답변
그것은 나를 위해 일했습니다.
- “typings”라는 폴더를 만듭니다.
-
typings 폴더에서 파일 이름 module-name.d.ts를 작성하십시오 . 다음을 포함합니다.
declare module "module-name";
-
tsconfig.json에서 폴더를 참조하십시오.
"typeRoots": [
"./typings",
"../node_modules/@types"
]
답변
나는이 오류가 발생했으며 대답 중 어느 것도 나를 위해 일하지 않았지만 typescript에서 노드 모듈로 작업하고 싶을 때 무언가를 알아냅니다.
$npm install @types/<module_name>
예를 들면
npm install @types/cheerio
말하는 대신
npm install cheerio