4 ms·
My favorite: the new `object` type. Non-nullable and cannot refer to primitives.
by aduffy 10y ago
My favorite: the new `object` type. Non-nullable and cannot refer to primitives.
- whatever_dude 10y agoThe new `react-native` jsx target is also a good step in the right direction of creating smooth React Native projects in TS. I can't wait for it to be a seamless dev experience, but now the ball's in RN's court. [1] (Context: using TS in a RN project is currently a bit disjointed because of its closed dev bundling workflow. You need a separate build task running concurrently to feed JS files to the main watch/build task.) [1] https://github.com/facebook/react-native/pull/11932 https://github.com/facebook/react-native/pull/11932
- dsp1234 10y agoNon-nullable This is incorrect, as is the announcement. The following is valid. class Bar{} let foo:object = new Bar() foo = null foo = undefined edit: For the people mentioning, --strictNullChecks. That applies to all types not just object. For example, "let x:string = null" would also be an error. That option applies to any type that is not of type Any/null/undefined, and has been in place since 2.0. In that way, "object" is non-nullable under strictNullChecks just as every other type is.
- realharo 10y agoI guess it's only so with `strictNullChecks` enabled? Anyway, TypeScript's `strictNullChecks` in general has a huge hole in that it allows uninitialized properties (https://github.com/Microsoft/TypeScript/issues/8476 https://github.com/Microsoft/TypeScript/issues/8476).
- whatever_dude 10y agoNo, object is not a nullable type. For your code to work, you'd need to run it with strictNullChecks disabled. That's probably what you're doing, since it's the default.
- mohamedhegazy 10y agoWithout `--strictNullChecks`, both `undefined` and `null` are in the domain of all types.
- dsp1234 10y agosince it's the default. It's not the default for the command line compiler. Also, all types (except Any/null/undefined) are non-nullable under that option, so that's not what makes object special (it's the no primitive types that is important). >tsc test.ts >tsc test.ts --strictNullChecks > test.ts(3,1): error TS2322: Type 'null' is not assignable to type 'object'.
- whatever_dude 10y ago> you'd need to run it with strictNullChecks disabled. That's probably what you're doing, since it's the default I think you misinterpreted my reply. I meant the default is off. That's what your code shows.
- dsp1234 10y agoI did, sorry about that.
- benjaminjackman 10y agoI think you can use the `--strictNullChecks`[1] compiler option to get that behavior though. 1: https://www.typescriptlang.org/docs/handbook/compiler-options.html https://www.typescriptlang.org/docs/handbook/compiler-option...
- DanRosenwasser 10y agoThanks for catching - I've updated the blog post. I tend to just use `strictNullChecks` by default, as it's typically the best option for any new code. :)
- realharo 10y agoCan you show a few examples of where this is useful?
- dsp1234 10y agoYou can read the proposal and discussion around the feature on the github suggestion page for this feature. The initial suggestion was made because there are certain functions in JavaScript that expect a non-primitive type in order to function. Such as Object.create, Object.getPrototypeOf, etc. Previous to this there was no way to model the functions with type safety, such that a developer would be prevented from accidentally sending a primitive value into those functions. This is because Typescript doesn't have the ability to say "Any type except X, Y and Z". So a new type was needed for this. https://github.com/Microsoft/TypeScript/issues/1809 https://github.com/Microsoft/TypeScript/issues/1809
- realharo 10y agoThanks. Sounds useful especially for library authors.