来自lib.es2015.collection.d.ts
:
interface SetConstructor {
new <T = any>(values?: readonly T[] | null): Set<T>;
readonly prototype: Set<any>;
}
declare var Set: SetConstructor;
T
中Set<T>
的类型默认为any
。但是,我想在我们的项目中强制执行Set
构造函数的任何调用者都提供type参数。
所以
new Set<any>();
将是有效的,但
new Set();
将会是一个错误。
可以直接在TypeScript中实现吗?如果不是,是否有任何现有的构建时工具可用于相同目的?
答案 0 :(得分:2)
您可以尝试下一个示例:
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
没有编译错误,但是,您将无法调用[set]的任何方法。
在这里,TypeScript在我的示例中将[set]视为一个空值,没有属性和方法。