Can Optional Chaining imitate swift style?
0x30 opened this issue · 3 comments
I think I should bring it up here
Search Terms
- swift style
- Swift if let statement
- Optional Chaining
Suggestion
- The left-hand side of an assignment expression may not be an optional property acces
if let
style,determine whether it is optional and obtain the object
Use Cases
for Suggestion 1
The following code is not allowed in typescript 3.7.2
.It's going to make a The left-hand side of an assignment expression may not be an optional property access
mistake
class Foo{
foo: Foo | undefined
name: String | undefined
}
let foo = new Foo()
// next line. ~~ The left-hand side of an assignment expression may not be an optional property access
foo.foo?.name = "";
But similar code, swift works well
class Foo{
var name: String?
var foo: Foo?
}
let foo = Foo()
foo.foo?.name = "hello"
In view of this, do we have any plans to solve this problem at present?
for Suggestion 2
About judging optional variables and using it,The current practice of TS is
if(foo?.foo) {
/// foo.foo is non optional
}
In swift, there is a way to turn optional into non optional.
if let foo1 = foo?.foo {
// -- foo1 is non optional
}
Can be used in 'kotlin'
foo?.foo?.let{ foo1 ->
// -- foo1 is non optional
}
If you judge a method result. In order not to call the calculation twice, you need to replace the code with.
const value = foo?.foo()
if(value) {
// -- value is non optional
}
foo.foo?.name = "hello"
Optional assignment is discussed in #18.
if let foo1 = foo?.foo { … }
See https://github.com/tc39/proposal-Declarations-in-Conditionals
foo.foo?.name = "hello"
Optional assignment is discussed in #18.
if let foo1 = foo?.foo { … }
See https://github.com/tc39/proposal-Declarations-in-Conditionals
@jridgewell ok. thanks. I went to have a look. The proposal is already very good
Closing this issue per #126 (comment) above.