mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Add support for StringLiteralTypeAnnotation (#46827)
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/46827 You can now define a native module that takes an argument that is a specific string literal: Like this: ``` export interface Spec extends TurboModule { +passString: (arg: string) => void; +passStringLiteral: (arg: 'A String Literal') => void; } ``` On the native side, this will still generate `string`, but the schema will now store the string literal, and it will be allowed in JS. This should allow more strict flow / typescript types for modules. This will also allow the compatibility check to fail if the literal changes. This is a step towards accepting a union of string literals. Changelog: [General][Added] Codegen for Native Modules now supports string literals Reviewed By: GijsWeterings Differential Revision: D63872440 fbshipit-source-id: e54b97d34af4a3d1af51727db0777f26fb7b778c
This commit is contained in:
committed by
Facebook GitHub Bot
parent
73ce1984e8
commit
d2f3f06826
+19
-1
@@ -127,9 +127,12 @@ function translateEventEmitterTypeToJavaType(
|
||||
eventEmitter: NativeModuleEventEmitterShape,
|
||||
imports: Set<string>,
|
||||
): string {
|
||||
switch (eventEmitter.typeAnnotation.typeAnnotation.type) {
|
||||
const type = eventEmitter.typeAnnotation.typeAnnotation.type;
|
||||
switch (type) {
|
||||
case 'StringTypeAnnotation':
|
||||
return 'String';
|
||||
case 'StringLiteralTypeAnnotation':
|
||||
return 'String';
|
||||
case 'NumberTypeAnnotation':
|
||||
case 'FloatTypeAnnotation':
|
||||
case 'DoubleTypeAnnotation':
|
||||
@@ -145,7 +148,16 @@ function translateEventEmitterTypeToJavaType(
|
||||
case 'ArrayTypeAnnotation':
|
||||
imports.add('com.facebook.react.bridge.ReadableArray');
|
||||
return 'ReadableArray';
|
||||
case 'DoubleTypeAnnotation':
|
||||
case 'FloatTypeAnnotation':
|
||||
case 'Int32TypeAnnotation':
|
||||
case 'VoidTypeAnnotation':
|
||||
// TODO: Add support for these types
|
||||
throw new Error(
|
||||
`Unsupported eventType for ${eventEmitter.name}. Found: ${eventEmitter.typeAnnotation.typeAnnotation.type}`,
|
||||
);
|
||||
default:
|
||||
(type: empty);
|
||||
throw new Error(
|
||||
`Unsupported eventType for ${eventEmitter.name}. Found: ${eventEmitter.typeAnnotation.typeAnnotation.type}`,
|
||||
);
|
||||
@@ -183,6 +195,8 @@ function translateFunctionParamToJavaType(
|
||||
}
|
||||
case 'StringTypeAnnotation':
|
||||
return wrapOptional('String', isRequired);
|
||||
case 'StringLiteralTypeAnnotation':
|
||||
return wrapOptional('String', isRequired);
|
||||
case 'NumberTypeAnnotation':
|
||||
return wrapOptional('double', isRequired);
|
||||
case 'FloatTypeAnnotation':
|
||||
@@ -273,6 +287,8 @@ function translateFunctionReturnTypeToJavaType(
|
||||
return 'void';
|
||||
case 'StringTypeAnnotation':
|
||||
return wrapOptional('String', isRequired);
|
||||
case 'StringLiteralTypeAnnotation':
|
||||
return wrapOptional('String', isRequired);
|
||||
case 'NumberTypeAnnotation':
|
||||
return wrapOptional('double', isRequired);
|
||||
case 'FloatTypeAnnotation':
|
||||
@@ -383,6 +399,8 @@ function getFalsyReturnStatementFromReturnType(
|
||||
}
|
||||
case 'StringTypeAnnotation':
|
||||
return nullable ? 'return null;' : 'return "";';
|
||||
case 'StringLiteralTypeAnnotation':
|
||||
return nullable ? 'return null;' : 'return "";';
|
||||
case 'ObjectTypeAnnotation':
|
||||
return 'return null;';
|
||||
case 'GenericObjectTypeAnnotation':
|
||||
|
||||
Reference in New Issue
Block a user