If it's an "array of strings AND numbers", then it should not be allowed to call the function with a string[], because those are different types.
This compiles fine:
class A {}
class B1 extends A {}
class B2 extends A {}
public class MyClass {
public static void main(String args[]) {
A[] array = new B1[1];
array[0] = new B2();
}
}In TypeScript the following is also valid:
class Something{
value: Number
}class SomethingElse{
value: Number
foo: String
bar: SomeOtherThing[]
}function AddSomething(v: Something)
{
v.value += 1;
}var ex = new SomethingElse{
value: 3,
foo: “TypeScript is fake types”,
bar: []
};AddSomething(ex);
Why does it work? Because in TypeScript as long as you have a “shape” that fits, it’s the “same type.”
Complete and utter insanity to me, to pretend there’s any real type checking, when types are entirely fake and made up.