isAssignableTo abstract method
Type Assignability Table:
DART TYPE ASSIGNABILITY TABLE
────────────────────────────────────────────────────────────────────────────
From (A) → To (B) A.isAssignableTo(B) Valid? Notes
────────────────────────────────────────────────────────────────────────────
String → Object ✅ true ✅ String extends Object
Object → String ❌ false ❌ Superclass to subclass not allowed
int → num ✅ true ✅ int is a subtype of num
num → int ❌ false ❌ Can't assign broader to narrower
List<int> → List<int> ✅ true ✅ Identical type
List<S> → List<T> ❌ false ❌ Dart generics are invariant
List<int> → List<dynamic> ❌ false ❌ Invariant generics
B → A (B extends A) ✅ true ✅ Subclass to superclass: OK
C → A (no relation) ❌ false ❌ Unrelated types
Class → Interface (implements) ✅ true ✅ Implements interface
Class → Mixin (with mixin) ✅ true ✅ Class includes mixin
anything → dynamic ✅ true ✅ Everything is assignable to dynamic
dynamic → anything ✅ true (unchecked) ✅ Allowed but unsafe
anything → Never ❌ false ❌ Can't assign anything to Never
Never → anything ✅ true ✅ Never fits anywhere
────────────────────────────────────────────────────────────────────────────
RULE OF THUMB:
A.isAssignableTo(B) → Can you do: B b = A();
✓ Subclass → Superclass: OK
✗ Superclass → Subclass: Not OK
✓ Class → Interface it implements: OK
✗ Interface → Class: Not OK
✓ Identical types: OK
✗ Unrelated types: Not OK
Checks if this type is assignable to the given target
type.
Returns true
if a value of this type can be assigned to a variable of type target
.
This is the inverse of isAssignableFrom.
Implementation
bool isAssignableTo(TypeDeclaration target);