Typescript 有并没有办法强制集合的调用者<;T>;构造函数是否提供类型参数?

Typescript 有并没有办法强制集合的调用者<;T>;构造函数是否提供类型参数?,typescript,Typescript,从lib.es2015.collection.d.ts: 接口设置构造函数{ 新建(值?:只读T[]| null):设置; 只读原型:Set; } 声明变量集:SetConstructor; Set中的T类型默认为any。但是,我想在我们的项目中强制要求Set构造函数的任何调用方都提供类型参数 所以 newset(); 将是有效的,但是 newset(); 这将是一个错误 这可以直接在TypeScript中实现吗?如果没有,是否有任何现有的构建时工具可用于相同的目的?您可以尝试下一个示例:

lib.es2015.collection.d.ts

接口设置构造函数{
新建(值?:只读T[]| null):设置;
只读原型:Set;
}
声明变量集:SetConstructor;
Set
中的
T
类型默认为
any
。但是,我想在我们的项目中强制要求
Set
构造函数的任何调用方都提供类型参数

所以

newset();
将是有效的,但是

newset();
这将是一个错误


这可以直接在TypeScript中实现吗?如果没有,是否有任何现有的构建时工具可用于相同的目的?

您可以尝试下一个示例:

declare global {

    interface SetConstructor {
        new(): never; // thanks @jcalz for pointing this out
        new <T>(values?: readonly T[] | null): Set<T>;
        readonly prototype: Set<any>;
    }
    var Set: SetConstructor;
}

// no compile error
const set = new Set(); // never type
set // unable to call any method, because [set] has [never] type

声明全局{
接口集合构造函数{
new():never;//感谢@jcalz指出这一点
新建(值?:只读T[]| null):设置;
只读原型:Set;
}
var集:SetConstructor;
}
//没有编译错误
常量集=新集();//从不打字
set//无法调用任何方法,因为[set]具有[never]类型
没有编译错误,但是,您将无法调用[set]的任何方法


在这里,TypeScript将我的示例中的[set]视为一个空值,没有属性和方法。

这可能会产生意外的后果,因为
从不
与控制流类型收缩交互。使用
unknown
应该是安全的,或者
Set
可能会在构建集后使用该集的代码中产生更容易理解的错误消息。实际上,我突然想到,您可以使用类似
Set
的字符串文本类型来显示自己的“错误消息”。您能用
new替换第一个签名吗():从来没有< /代码>?@ Kaya3我考虑字符串字形错误类型,但是您将能够调用[SET]变量上的字符串方法。如果您正在寻找比<代码> > <代码>更好的东西,您可以考虑任何建议,因为TS当前不支持“无效”或“抛出”。允许自定义错误消息的类型