2016-06-30 2 views
0

В документации по потоку рекомендуется использовать Function и Object типа экономно. Если это так, то что я должен использовать? Вот несколько сценариев:Что следует использовать вместо функций и типов объектов в потоке

export function executeFunction(someFunc) { 
    someFunc.call(this, 'whatever'); 
} 

export function processThing(someObj) { 
    // ... 
} 

Каков правильный способ их аннотировать? (примечание: someObj может быть любым объектом .. и он может иметь десятки методов и свойств, и я не хочу вводить все эти данные в аннотации)

ответ

1

Ну, для одного, так как вы не используя выход processThing, я предполагаю, что это ничего не возвращает, так что вы можете добавить аннотацию к этому:

export function processThing(someObj): void { 

что касается someObj ... вы хотите иметь типобезопасность при переходе вокруг и доступ к этим объект?

№: не считают аннотирования его с типом any, mixed или Object в зависимости от того, что именно вы имеете в виду под «любой».

Да: вам придется его аннотировать. Вы можете написать свой тип inline, но вы также можете определить тип в другом месте (в том числе в другом файле) и повторно использовать его в нескольких местах, если это необходимо. Например, как это:

type Thing = { 
    foo: string; 
    bar: number; 
} 
// ... 
export function processThing(someObj: Thing): void { 

Если someObj, как ожидается, будет экземпляром некоторого класса ES6, вы также можете использовать этот класс в качестве типа (см docs).


executeFunction Что касается, вы можете указать, что вы хотите функцию, которая принимает Thing в качестве первого аргумента, и ничего не возвращает:

export function executeFunction(someFunc: (something: Thing) => void) { 
+0

Спасибо! Интересно, что для указания функции, возвращающей определенный тип, синтаксис представляет собой ': string' в одном случае, но' => string' в другом. Это смущает. – ffxsam

+1

BTW, я считаю, что 'object' должен быть' Object'. – ffxsam

+0

'=>' используется для обозначения типа функции. ':' используется для возвращаемого типа, когда функция уже определена, и вы аннотируете тип, который будет возвращен. Это имеет смысл, когда вы немного об этом думаете. –

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