我是打字稿的新手,我正在尝试通过添加所有类型将JS自定义库迁移到TS。 这是我尝试做的一个简单的例子。 原始JS文件(类("解析器.js":
class Parser {
constructor(name){
this.name = name;
}
}
module.exports = Parser;
类型文件 'parsertypes.d.ts':
export type tbrat = {
constructor(name:string): tbrat;
};
TS 使用文件 'utilize.ts':
import Parser from './parser';
import {tbrat} from './parsertypes';
const n: tbrat = new Parser('hello');
错误:
Type 'Parser' is not assignable to type 'tbrat'. Types of property 'constructor' are incompatible. Type 'Function' is not assignable to type '(name: string) => tbrat'. Type 'Function' provides no match for the signature '(name: string): tbrat'.
我不明白我错过了什么。由于特殊原因,我无法将原始JS文件移动到TS。
就像JavaScript有模块一样,TypeScript也有。
如果你正在编写纯 TypeScript,则无需执行以下操作,因为转译器会为您处理这个问题。但是,在创建定义文件时,需要以与 JavaScript 代码相同的方式声明模块。
您需要在parser.d.ts
中声明解析器模块:
declare module "parser" {
class Parser {
constructor(name:string): void
}
export default Parser;
}
然后,您可以像往常一样导入parser
utilize.ts
:
import Parser from 'parser'
const foo = new Parser('test')
延伸阅读: https://www.typescriptlang.org/docs/handbook/modules.html
没有构造函数用于仅针对类的type
定义,因此您可能希望使用declare
,如下所示的内容将起作用:
class Parser {
constructor(name){
name;
}
}
declare class tbrat {
constructor(name: string) {
}
}
const n: tbrat = new Parser('hello');
也请看看诺埃尔·瓦兰达的回答。