我正在尝试在打字稿项目中使用N3库。 README上的示例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中的类型定义是旧的并且已过时,因此我无法使用它们。我正在尝试为库创建自己的类型定义,但我无法弄清楚如何执行此操作。是否可以创建驻留在我的本地项目中的类型定义文件(即不在node_modules?中)。我试图以几种方式做到这一点但没有成功。有没有办法做到这一点?处理这种情况的正确方法是什么?
答案 0 :(得分:1)
您可以在编译时包含的单独文件中为n3
创建模块声明(例如.d.ts
文件)。
declare module 'n3' {
export interface Foo {} // replace with real interface/method declarations.
}
一种常见的模式是使用命名空间声明事物,然后将命名空间导出为模块。这允许从命名空间引用类型而无需导入任何内容。
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