This used to be valid code:
```
class Foo {
  constructor() {
    this.bar = ‘string’;
  }
}
```
This will now fail since ‘bar’ is not explicitly
defined as a field. We now have to write:
```
class Foo {
  bar:string; // << REQUIRED
  constructor() {
    this.bar = ‘string’;
  }
}
```
		
	
			
		
			
				
	
	
		
			79 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import {describe, it, expect, iit} from 'test_lib/test_lib';
 | 
						|
import {readFirstAnnotation} from './fixtures/annotations';
 | 
						|
import {CONST} from 'facade/lang';
 | 
						|
 | 
						|
class Inject {}
 | 
						|
class Bar {}
 | 
						|
 | 
						|
class Provide {
 | 
						|
  token;
 | 
						|
 | 
						|
  @CONST()
 | 
						|
  constructor(token) {
 | 
						|
    this.token = token;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
class AnnotateMe {
 | 
						|
  maybe;
 | 
						|
 | 
						|
  @CONST()
 | 
						|
  constructor({maybe = 'default'} = {}) {
 | 
						|
    this.maybe = maybe;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
@Provide('Foo')
 | 
						|
class Foo {
 | 
						|
  @Inject
 | 
						|
  constructor() {}
 | 
						|
}
 | 
						|
 | 
						|
@Provide(Foo)
 | 
						|
function baz() {}
 | 
						|
 | 
						|
@AnnotateMe()
 | 
						|
class A {}
 | 
						|
 | 
						|
@AnnotateMe({maybe: 'yes'})
 | 
						|
class B {}
 | 
						|
 | 
						|
@AnnotateMe({maybe: {'a': 'b'}})
 | 
						|
class SomeClassWithMapInAnnotation {}
 | 
						|
 | 
						|
@AnnotateMe({maybe: [23]})
 | 
						|
class SomeClassWithListInAnnotation {}
 | 
						|
 | 
						|
@AnnotateMe({maybe: new Provide(0)})
 | 
						|
class SomeClassWithConstObject {}
 | 
						|
 | 
						|
function annotatedParams(@Inject(Foo) f, @Inject(Bar) b) {}
 | 
						|
 | 
						|
export function main() {
 | 
						|
  describe('annotations', function() {
 | 
						|
    it('should work', function() {
 | 
						|
      // Assert `Foo` class has `Provide` annotation.
 | 
						|
      var clazz = readFirstAnnotation(Foo);
 | 
						|
      expect(clazz instanceof Provide).toBe(true);
 | 
						|
    });
 | 
						|
 | 
						|
    it('should work with named arguments', function() {
 | 
						|
      expect(readFirstAnnotation(A).maybe).toBe('default');
 | 
						|
      expect(readFirstAnnotation(B).maybe).toBe('yes');
 | 
						|
    });
 | 
						|
 | 
						|
    it('should work with maps in named arguments', () => {
 | 
						|
      expect(readFirstAnnotation(SomeClassWithMapInAnnotation).maybe).toEqual({'a': 'b'});
 | 
						|
    });
 | 
						|
 | 
						|
    it('should work with lists in named arguments', () => {
 | 
						|
      expect(readFirstAnnotation(SomeClassWithListInAnnotation).maybe).toEqual([23]);
 | 
						|
    });
 | 
						|
 | 
						|
    it('should work with new instances in named arguments', () => {
 | 
						|
      expect(readFirstAnnotation(SomeClassWithConstObject).maybe).toEqual(new Provide(0));
 | 
						|
    });
 | 
						|
  });
 | 
						|
}
 |