Typescript 如何在本地项目中为javascript库创建类型定义?

Typescript 如何在本地项目中为javascript库创建类型定义?,typescript,Typescript,我正在尝试在typescript项目中使用该库。自述文件上的示例javascript代码如下所示 const N3 = require('n3'); const { DataFactory } = N3; const { namedNode, literal, defaultGraph, quad } = DataFactory; const myQuad = quad( namedNode('https://ruben.verborgh.org/profile/#me'), named

我正在尝试在typescript项目中使用该库。自述文件上的示例javascript代码如下所示

const N3 = require('n3');
const { DataFactory } = N3;
const { namedNode, literal, defaultGraph, quad } = DataFactory;
const myQuad = quad(
  namedNode('https://ruben.verborgh.org/profile/#me'),
  namedNode('http://xmlns.com/foaf/0.1/givenName'),
  literal('Ruben', 'en'),
  defaultGraph(),
);
在打字脚本中,我被困在第一步。在项目的根目录中,我有一个名为main.ts的文件,其中包含以下内容

import * as N3 from "n3";
但是我得到一个错误“找不到模块'n3'的声明文件”


这就是我被困的地方。DefinitelyTyped中的类型定义是旧的和过时的,因此我无法使用它们。我正在尝试为库创建我自己的类型定义,但我不知道如何做到这一点。是否可以创建驻留在本地项目中的类型定义文件(即不在节点\ U模块中?)。我尝试过几种方法,但都没有成功。有办法做到这一点吗?处理这种情况的正确方法是什么

您可以在编译时包含的单独文件(例如
.d.ts
文件)中为
n3
创建模块声明

一种常见的模式是使用名称空间声明事物,然后将名称空间作为模块导出。这允许从名称空间引用类型,而无需导入任何内容

declare namespace N3 {
    interface Foo {} // replace with real interface/method declarations.
}

declare module 'n3' {
    export = N3;
}
现在,您可以通过import语句或直接从名称空间引用该类型

import {Foo} from 'n3'; // Import type from module
let foo:N3.Foo = {}; // Use type directly from namespace

当我尝试第一个模块时,会出现此错误,“[ts]扩展中的模块名称无效。模块'n3'解析为位于'//node_modules/n3/n3.js'的非类型化模块,无法扩展。”
import {Foo} from 'n3'; // Import type from module
let foo:N3.Foo = {}; // Use type directly from namespace