Skip to content

Commit 3ffc543

Browse files
authored
[TypeScript] Provide two types of callback for a subscription (#1028)
Currently, the type of callback for a subscription is defined as: ```ts type SubscriptionCallback<T extends TypeClass<MessageTypeClassName>> = (message: MessageType<T> | Buffer) => void ``` which causes a type error when pass a callback either for a normal message or raw message. This patch provides two types of callback for a subscription, which are: 1. For a normal message ```ts type SubscriptionCallback<T extends TypeClass<MessageTypeClassName>> = (message: MessageType<T>) => void; ``` 2. For a raw message: ```ts type SubscriptionWithRawMessageCallback = (message: Buffer) => void; ``` After this patch, we can use the correct callback type for a subscription, like: ```ts subscription = node.createSubscription( TYPE_CLASS, TOPIC, { isRaw: true }, (message: Buffer) => { const receivedRawMessage = message; } ); ``` Fix: #1013
1 parent e99fb8e commit 3ffc543

File tree

3 files changed

+38
-2
lines changed

3 files changed

+38
-2
lines changed

test/types/main.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,26 @@ subscription = node.createSubscription(
237237
(msg) => {}
238238
);
239239

240+
// $ExpectType Subscription
241+
subscription = node.createSubscription(
242+
TYPE_CLASS,
243+
TOPIC,
244+
{ isRaw: false },
245+
(message: rclnodejs.std_msgs.msg.String) => {
246+
const receivedMessage = message;
247+
}
248+
);
249+
250+
// $ExpectType Subscription receiving raw message
251+
subscription = node.createSubscription(
252+
TYPE_CLASS,
253+
TOPIC,
254+
{ isRaw: true },
255+
(message: Buffer) => {
256+
const receivedRawMessage = message;
257+
}
258+
);
259+
240260
// $ExpectType string
241261
subscription.topic;
242262

types/node.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ declare module 'rclnodejs' {
324324
typeClass: T,
325325
topic: string,
326326
options: Options,
327-
callback: SubscriptionCallback<T>
327+
callback: SubscriptionCallback<T> | SubscriptionWithRawMessageCallback
328328
): Subscription;
329329

330330
/**

types/subscription.d.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,23 @@ declare module 'rclnodejs' {
1313
*/
1414
type SubscriptionCallback<T extends TypeClass<MessageTypeClassName>> =
1515
// * @param message - The published message
16-
(message: MessageType<T> | Buffer) => void;
16+
(message: MessageType<T>) => void;
17+
18+
/**
19+
* A callback for receiving published raw messages.
20+
*
21+
* @param message - The published message.
22+
*
23+
* @remarks
24+
* See {@link Node#createSubscription | Node.createSubscription}
25+
* See {@link SubscriptionContentFilter}
26+
* See {@link Node#createPublisher | Node.createPublisher}
27+
* See {@link Publisher}
28+
* See {@link Subscription}
29+
*/
30+
type SubscriptionWithRawMessageCallback =
31+
// * @param message - The published raw message
32+
(message: Buffer) => void;
1733

1834
/**
1935
* A ROS Subscription for published messages on a topic.

0 commit comments

Comments
 (0)