网站搜索

typescript - 如何声明两个不可赋值的类型?


我有一个 FFI 绑定,在几个地方使用了 void *。我想在 Typescript 端区分它们。我是这样做的:

interface Struct1Ptr extends Buffer {};
interface Struct2Ptr extends Buffer {};
var x: Struct1Ptr;
var y: Struct2Ptr;

我想让那些类型不能被赋值,这样当我尝试执行 x=y 或 y=x,或将错误类型作为函数参数使用时,会提示错误。

答案#1

TypeScript 对所有内容都使用结构类型,因此你实际上必须让它们在结构上有所不同,例如:

interface Struct1Ptr extends Buffer { _isStruct1: void };
interface Struct2Ptr extends Buffer { _isStruct2: void };
var x: Struct1Ptr;
var y: Struct2Ptr;