export default function Api<T>(opts?: Settings): Api<T>;
我得到“只有void函数可以用'new'关键字调用”。我知道new
关键字在声明文件中是有效的,例如:
export default interface Api {
new<T=any>(opts?: Settings): Api<T>
}
这只是导出一个类型,正如编译器所说:“只引用一个类型,但在这里被用作值”。
我不能在这里使用类,因为API可以通过来自其他文件的插件进行扩展,类型声明合并在类上不起作用(我希望其他文件添加的方法也能够通过它们自己的键入文件进行键入)。
我不知所措-有什么主意吗?
我无法得到与您完全相同的错误,但我能够在TypeScript 4.3.5中拼凑出一些东西,这些东西允许默认导出为一个(可扩展的)接口,您仍然可以定期调用该接口并将其用作构造函数:
API.D.TS
interface Settings {
setting?: string;
}
declare interface Api<T> {
getValue(): T;
<T>(opts?: Settings): Api<T>;
new<T>(opts?: Settings): Api<T>;
}
declare const Api: Api<any>;
export default Api;
index.ts
import Api from './api';
// Augmentation the interface
declare module './api' {
export default interface Api<T> {
newField: number;
}
}
// Test the default export as Api instance
Api.getValue();
console.log(Api.newField);
// See if we can call/new the Api instance
const api = new Api<number>();
const api2 = Api<number>();
const api3: Api<number> = null!;
// Test the created instance as Api instance
const value: number = api.getValue();
console.log(api.newField);
主要内容:CalcThirdPartyJsLib.js 文件代码:,Calc.d.ts 文件代码:,CalcTest.ts 文件代码:,CalcTest.js 文件代码:,实例TypeScript 作为 JavaScript 的超集,在开发过程中不可避免要引用其他第三方的 JavaScript 的库。虽然通过直接引用可以调用库的类和方法,但是却无法使用TypeScript 诸如类型检查等特性功能。为了解决这个问题,需要将这些库里的函数和方法体去掉后只保留导出类型声明,而产生了一个描述 JavaS
主要内容:类型断言(Type Assertion),类型推断,变量作用域变量是一种使用方便的占位符,用于引用计算机内存地址。 我们可以把变量看做存储数据的容器。 TypeScript 变量的命名规则: 变量名称可以包含数字和字母。 除了下划线 _ 和美元 $ 符号外,不能包含其他特殊字符,包括空格。 变量名不能以数字开头。 变量使用前必须先声明,我们可以使用 var 来声明变量。 我们可以使用以下四种方式来声明变量: 声明变量的类型及初始值: 例如: 声明变量的类型,
TypeScript 编译器会将程序中多个具有相同名称的声明合并为一个声明。 但这并不是说 TypeScript 会随意的合并两个名称相同的字符串变量,这显然是不符合语法规定的,那么本节将介绍什么样的声明可以进行合并。 1. 慕课解释 TypeScript 中的声明会创建以下三种实体之一:命名空间、类型或值。 来看以下声明都创建了什么实体: 声明类型 创建了命名空间 创建了类型 创建了值 Name
本节介绍 var let const 这三种变量的声明方式,重点讨论作用域与变量提升的相关知识点,这部分往往也是面试常考部分,需要多加注意。 说明: 在使用 TypeScript 进行变量声明时,一般建议添加对应的变量类型,由于本节是整个系列教程的第一节,还未介绍 TypeScript 的类型系统,所以本节的例子仍采用 JavaScript 的变量声明方式。虽然在变量声明时没有添加变量类型,但是
我想在我的基于打字稿的项目中,在它们自己的文件中定义几个接口,我将从它们中实现用于生产的类以及用于测试的模拟。但是,我不知道正确的语法是什么。我找到了很多关于声明接口和实现它们的教程,但是它们都在同一个文件中实现了接口和派生类,这不是很真实。导出和导入接口的正确方法是什么?
问题内容: 是否可以在不首先完全定义函数的情况下调用函数?尝试执行此操作时,出现错误:“未定义 function_name ”。我来自C ++背景,因此这个问题使我感到困惑。 在工作之前声明该功能: 但是,尝试在未先定义函数的情况下调用该函数会带来麻烦: 在C ++中,一旦将其标头放在函数后,就可以在调用后声明一个函数。 我在这里想念什么吗? 问题答案: Python中一种惯用的方式是编写: 只要