javascript - 打字稿:属性“构造函数”的类型不兼容
问题描述
我是 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。
解决方案
就像 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
推荐阅读
- c# - 我如何获取所有 blob 而不仅仅是根目录中的 blob
- linux - 如果写入的值未更改, mmap() 是否会执行写入?
- r - R中带有md5的递归文件列表
- android - 在某些设备上使用 Fresco 进行缓存会导致 OOM
- outlook-calendar - 无法获取 Outlook 日历事件,javascript
- python - 关闭控制台时执行python指令
- javascript - 如何从代码中在迷你图中显示工具提示
- python - 多并行输入和多步输出时间序列预测
- powershell - Powershell 仅复制子文件夹
- reactjs - 如何渲染 React 组件树中节点的位置?