首页 > 解决方案 > 打字稿:属性“构造函数”的类型不兼容

问题描述

我是 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。

标签: javascripttypescripttypes

解决方案


就像 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


推荐阅读