我是Typescript的新手,我正在尝试通过添加所有类型将JS定制库迁移到TS。 这是我尝试做的一个简单示例。 原始JS文件(类)“ parser.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。
答案 0 :(得分:4)
TypeScript也具有JavaScript具有模块的方式。
如果您正在编写纯净的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
答案 1 :(得分:0)
没有type
定义的构造函数,仅用于类,因此您可能要使用declare
,类似以下的内容将起作用:
class Parser {
constructor(name){
name;
}
}
declare class tbrat {
constructor(name: string) {
}
}
const n: tbrat = new Parser('hello');
也请看看Noel Varanda的answer。