So we have been seduced to believe that TypeScript is very similar to Java. The longer I try it out the more I find out that it is not.
TS gives us access modifiers similar to Java:
const
inside classes, resembles Java final
)The Java default access modifier (package-visibility, active when no modifier was defined) is not present in TS, because no package-concept exists.
Access modifiers promise something that never has been standardized. Thus the Scala programmer may expect something different than the C++ or Java programmer. Let's try out private
in TypeScript.
I know, it is ridiculous to derive FlagShip
from Flag
, but look how I defined private properties in these classes:
Try to compile this by
tsc -t ES6 *.ts
You will see following error:
error TS2415: Class 'FlagShip' incorrectly extends base class 'Flag'.
Types have separate declarations of a private property 'defaultValue'.
So not each of the two classes can have its own private defaultValue
property? What kind of privacy is this?
However, we must fix it by thinking about some useful name that can replace defaultValue
in class FlagShip
. I changed it to be shipDefaultValue
.
But, to challenge fate, I added two private methods of same name now.
Another compile error shows up:
error TS2415: Class 'FlagShip' incorrectly extends base class 'Flag'.
Types have separate declarations of a private property 'getDefaultValue'.
So, getDefaultValue
is a "property"? Isn't this called "method", or at least "function"?
What we learn is that private in TS means invisible to the outer world, but not to the compiler.
If something is quacking, it is not necessarily a duck. I will explore TS access modifiers further in future Blogs.
ɔ⃝ Fritz Ritzberger, 2018-05-17