gpt4 book ai didi

javascript - Typescript:属性 'constructor' 的类型不兼容

转载 作者:行者123 更新时间:2023-11-28 13:00:24 27 4
gpt4 key购买 nike

我是 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;
};

利用文件“utilize.ts”的 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;
}

然后,您可以像通常在 utilize.ts 中一样导入 parser:

import Parser from 'parser'

const foo = new Parser('test')

进一步阅读:https://www.typescriptlang.org/docs/handbook/modules.html

关于javascript - Typescript:属性 'constructor' 的类型不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51139115/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com