2016-07-25 5 views
2

У меня есть привязка FFI, и есть несколько мест, где используется void *. Я бы хотел отличить их от стороны с машинописным текстом. Что я делаю:Как объявить два непеременных типа?

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

Я хотел бы, чтобы эти типы не могущий быть переданным, уступленным, цедированным, так как сигнал, что ошибка при попытке назначить x = y или y = x или использовать неправильный тип в качестве аргументов функций.

ответ

3

Машинопись использует структурную типизацию для всех, так что вы на самом деле нужно сделать их структурно разные, например:

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

Теперь не присваиваемые базового класса, который может или не может быть хорошей вещью. –

+0

Если кто-то запрашивает буфер, Struct1Ptr и Struct2Ptr назначаются ему. Противоположно, конечно, не так. Очень ожидаемый, нет? – AlexG

+0

Довольно много, хотя мне также нужна концепция 'NULL', которая назначается как' x', так и 'y', и существует' ref.NULL' типа 'Buffer'. В основном это попытка имитировать семантику языка C в TypScript. –

Смежные вопросы