diff --git a/CHANGELOG.md b/CHANGELOG.md
index f851818..1ed45f0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -421,12 +421,6 @@
 - Add `RawSocket.sendMessage`, `RawSocket.receiveMessage` that allow passing of
   file handle references via Unix domain sockets.
 
-#### `dart:js_util`
-
-- The `js_util` methods `getProperty`, `setProperty`, `callMethod`,
-  `callConstructor`, and `newObject` now support a generic type argument
-  to specify the return type.
-
 ### Tools
 
 #### Dart command line
diff --git a/pkg/_js_interop_checks/lib/src/transformations/js_util_optimizer.dart b/pkg/_js_interop_checks/lib/src/transformations/js_util_optimizer.dart
index 2e4f847..add033d 100644
--- a/pkg/_js_interop_checks/lib/src/transformations/js_util_optimizer.dart
+++ b/pkg/_js_interop_checks/lib/src/transformations/js_util_optimizer.dart
@@ -138,8 +138,6 @@
         Arguments([
           VariableGet(function.positionalParameters.first),
           StringLiteral(_getExtensionMemberName(node))
-        ], types: [
-          DynamicType()
         ]))
       ..fileOffset = node.fileOffset;
     return ReturnStatement(
@@ -159,8 +157,6 @@
           VariableGet(function.positionalParameters.first),
           StringLiteral(_getExtensionMemberName(node)),
           VariableGet(function.positionalParameters.last)
-        ], types: [
-          DynamicType()
         ]))
       ..fileOffset = node.fileOffset;
     return ReturnStatement(AsExpression(
@@ -182,8 +178,6 @@
               .sublist(1)
               .map((argument) => VariableGet(argument))
               .toList())
-        ], types: [
-          DynamicType()
         ]))
       ..fileOffset = node.fileOffset;
     return ReturnStatement(AsExpression(
@@ -230,6 +224,7 @@
   /// Removing the checks allows further inlining by the compilers.
   StaticInvocation _lowerSetProperty(StaticInvocation node) {
     Arguments arguments = node.arguments;
+    assert(arguments.types.isEmpty);
     assert(arguments.positional.length == 3);
     assert(arguments.named.isEmpty);
 
@@ -249,6 +244,7 @@
   /// Removing the checks allows further inlining by the compilers.
   StaticInvocation _lowerCallMethod(StaticInvocation node) {
     Arguments arguments = node.arguments;
+    assert(arguments.types.isEmpty);
     assert(arguments.positional.length == 3);
     assert(arguments.named.isEmpty);
 
@@ -264,6 +260,7 @@
   /// Removing the checks allows further inlining by the compilers.
   StaticInvocation _lowerCallConstructor(StaticInvocation node) {
     Arguments arguments = node.arguments;
+    assert(arguments.types.isEmpty);
     assert(arguments.positional.length == 2);
     assert(arguments.named.isEmpty);
 
@@ -286,13 +283,8 @@
     // Lower arguments in a List.empty factory call.
     if (argumentsList is StaticInvocation &&
         argumentsList.target == _listEmptyFactory) {
-      return _createCallUncheckedNode(
-          callUncheckedTargets,
-          node.arguments.types,
-          [],
-          originalArguments,
-          node.fileOffset,
-          node.arguments.fileOffset);
+      return _createCallUncheckedNode(callUncheckedTargets, [],
+          originalArguments, node.fileOffset, node.arguments.fileOffset);
     }
 
     // Lower arguments in other kinds of Lists.
@@ -331,7 +323,6 @@
 
     return _createCallUncheckedNode(
         callUncheckedTargets,
-        node.arguments.types,
         callUncheckedArguments,
         originalArguments,
         node.fileOffset,
@@ -342,7 +333,6 @@
   /// with the given 0-4 arguments.
   StaticInvocation _createCallUncheckedNode(
       List<Procedure> callUncheckedTargets,
-      List<DartType> callUncheckedTypes,
       List<Expression> callUncheckedArguments,
       List<Expression> originalArguments,
       int nodeFileOffset,
@@ -352,7 +342,7 @@
         callUncheckedTargets[callUncheckedArguments.length],
         Arguments(
           [...originalArguments, ...callUncheckedArguments],
-          types: callUncheckedTypes,
+          types: [],
         )..fileOffset = argumentsFileOffset)
       ..fileOffset = nodeFileOffset;
   }
diff --git a/sdk/lib/js_util/js_util.dart b/sdk/lib/js_util/js_util.dart
index 7842a32..db385b6 100644
--- a/sdk/lib/js_util/js_util.dart
+++ b/sdk/lib/js_util/js_util.dart
@@ -64,63 +64,65 @@
   return _convert(data)!;
 }
 
-T newObject<T>() => JS('=Object', '{}');
+dynamic newObject() => JS('=Object', '{}');
 
 bool hasProperty(Object o, Object name) => JS('bool', '# in #', name, o);
 
-T getProperty<T>(Object o, Object name) => JS('Object|Null', '#[#]', o, name);
+// A CFE transformation will optimize all calls to `getProperty`.
+dynamic getProperty(Object o, Object name) =>
+    JS('Object|Null', '#[#]', o, name);
 
 // A CFE transformation may optimize calls to `setProperty`, when [value] is
 // statically known to be a non-function.
-T setProperty<T>(Object o, Object name, T? value) {
+dynamic setProperty(Object o, Object name, Object? value) {
   assertInterop(value);
   return JS('', '#[#]=#', o, name, value);
 }
 
 /// Unchecked version of setProperty, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
-T _setPropertyUnchecked<T>(Object o, Object name, T? value) {
+dynamic _setPropertyUnchecked(Object o, Object name, Object? value) {
   return JS('', '#[#]=#', o, name, value);
 }
 
 // A CFE transformation may optimize calls to `callMethod` when [args] is a
 // a list literal or const list containing at most 4 values, all of which are
 // statically known to be non-functions.
-T callMethod<T>(Object o, String method, List<Object?> args) {
+dynamic callMethod(Object o, String method, List<Object?> args) {
   assertInteropArgs(args);
   return JS('Object|Null', '#[#].apply(#, #)', o, method, o, args);
 }
 
 /// Unchecked version for 0 arguments, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
-T _callMethodUnchecked0<T>(Object o, String method) {
+dynamic _callMethodUnchecked0(Object o, String method) {
   return JS('Object|Null', '#[#]()', o, method);
 }
 
 /// Unchecked version for 1 argument, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
-T _callMethodUnchecked1<T>(Object o, String method, Object? arg1) {
+dynamic _callMethodUnchecked1(Object o, String method, Object? arg1) {
   return JS('Object|Null', '#[#](#)', o, method, arg1);
 }
 
 /// Unchecked version for 2 arguments, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
-T _callMethodUnchecked2<T>(
+dynamic _callMethodUnchecked2(
     Object o, String method, Object? arg1, Object? arg2) {
   return JS('Object|Null', '#[#](#, #)', o, method, arg1, arg2);
 }
 
 /// Unchecked version for 3 arguments, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
-T _callMethodUnchecked3<T>(
+dynamic _callMethodUnchecked3(
     Object o, String method, Object? arg1, Object? arg2, Object? arg3) {
   return JS('Object|Null', '#[#](#, #, #)', o, method, arg1, arg2, arg3);
 }
 
 /// Unchecked version for 4 arguments, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
-T _callMethodUnchecked4<T>(Object o, String method, Object? arg1, Object? arg2,
-    Object? arg3, Object? arg4) {
+dynamic _callMethodUnchecked4(Object o, String method, Object? arg1,
+    Object? arg2, Object? arg3, Object? arg4) {
   return JS(
       'Object|Null', '#[#](#, #, #, #)', o, method, arg1, arg2, arg3, arg4);
 }
@@ -132,7 +134,7 @@
 bool instanceof(Object? o, Object type) =>
     JS('bool', '# instanceof #', o, type);
 
-T callConstructor<T>(Object constr, List<Object?>? arguments) {
+dynamic callConstructor(Object constr, List<Object?>? arguments) {
   if (arguments == null) {
     return JS('Object', 'new #()', constr);
   } else {
@@ -195,32 +197,32 @@
 
 /// Unchecked version for 0 arguments, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
-T _callConstructorUnchecked0<T>(Object constr) {
+dynamic _callConstructorUnchecked0(Object constr) {
   return JS('Object', 'new #()', constr);
 }
 
 /// Unchecked version for 1 argument, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
-T _callConstructorUnchecked1<T>(Object constr, Object? arg1) {
+dynamic _callConstructorUnchecked1(Object constr, Object? arg1) {
   return JS('Object', 'new #(#)', constr, arg1);
 }
 
 /// Unchecked version for 2 arguments, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
-T _callConstructorUnchecked2<T>(Object constr, Object? arg1, Object? arg2) {
+dynamic _callConstructorUnchecked2(Object constr, Object? arg1, Object? arg2) {
   return JS('Object', 'new #(#, #)', constr, arg1, arg2);
 }
 
 /// Unchecked version for 3 arguments, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
-T _callConstructorUnchecked3<T>(
+dynamic _callConstructorUnchecked3(
     Object constr, Object? arg1, Object? arg2, Object? arg3) {
   return JS('Object', 'new #(#, #, #)', constr, arg1, arg2, arg3);
 }
 
 /// Unchecked version for 4 arguments, only used in a CFE transformation.
 @pragma('dart2js:tryInline')
-T _callConstructorUnchecked4<T>(
+dynamic _callConstructorUnchecked4(
     Object constr, Object? arg1, Object? arg2, Object? arg3, Object? arg4) {
   return JS('Object', 'new #(#, #, #, #)', constr, arg1, arg2, arg3, arg4);
 }
