2016-01-15 3 views
0

Я пытаюсь найти правильную подпись (текущая версия машинопись 1.7) для функции, которая должна принимать только ссылочные типы, а не примитивы:Машинопись: Объявить переменную с типом объекта буквального

function onlyObject(x: ???) { 
    if (typeof x !== 'object') { 
     throw "bad arg!"; 
    } 
} 

Таким образом, для функции выше это должно работать:

onlyObject({ }); 
onlyObject(new Date()); 
onlyObject(new Number(1)); 
onlyObject(null); 
onlyObject(function() { }); 

, но это будет не в состоянии во время компиляции:

onlyObject("awd"); 
onlyObject(1); 
onlyObject(false); 
+0

есть тип Object, но в последний раз я слышал, что в машинописном тексте была ошибка, которая позволяла отправлять что-либо при использовании. – toskv

+0

функция onlyObject (x: Date | Number | void | Function) {} ????? Я не считаю, что TypeScript различает число и число или строку и строку, поэтому вам может потребоваться исключить их. Или, может быть, переосмыслить, как вы приближаетесь к проблеме. В идеале у вас есть только один тип для одной переменной. – Jon49

+0

Кроме того, onlyObject (1) и onlyObject (new Number (1)) практически одинаковы в JavaScript, поскольку оба они действуют как объекты, когда они рассматриваются как один, как только они назначены переменной. – Jon49

ответ

3

В настоящее время не существует способа выразить это на языке.

Если вы чувствуете себя трудолюбивым, вы можете add it, так как проект принимает запросы на тягу для этой функции.

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