Merge branch 'master' into saferIndexedAccessTypes

This commit is contained in:
Anders Hejlsberg
2019-04-05 16:23:48 -10:00
272 changed files with 3313 additions and 1079 deletions

View File

@@ -45,4 +45,6 @@ const myStoreConnect: Connect = function(
mergeProps,
options,
);
};
};
export {};

View File

@@ -0,0 +1,40 @@
// @target: es5
class Test {
p1 = 0;
p2 = this.p1;
p3 = this.p4;
p4 = 0;
directlyAssigned: any = this.directlyAssigned;
withinArrowFunction: any = () => this.withinArrowFunction;
withinFunction: any = function () {
return this.withinFunction;
};
withinObjectLiteral: any = {
[this.withinObjectLiteral]: true,
};
withinObjectLiteralGetterName: any = {
get [this.withinObjectLiteralGetterName]() {
return true;
}
};
withinObjectLiteralSetterName: any = {
set [this.withinObjectLiteralSetterName](_: any) {}
};
withinClassDeclarationExtension: any = (class extends this.withinClassDeclarationExtension { });
// These error cases are ignored (not checked by control flow analysis)
assignedByArrowFunction: any = (() => this.assignedByFunction)();
assignedByFunction: any = (function () {
return this.assignedByFunction;
})();
}

View File

@@ -0,0 +1,8 @@
// @incremental: true
// @Filename: /a.ts
const x = 10;
// @Filename: /tsconfig.json
{ }

View File

@@ -0,0 +1,4 @@
// @incremental: true
const x = 10;

View File

@@ -0,0 +1,5 @@
// @incremental: true
// @out: output.js
const x = 10;

View File

@@ -0,0 +1,8 @@
// @incremental: true
// @tsBuildInfoFile: /a.tsbuildinfo
// @Filename: /a.ts
const x = 10;

View File

@@ -0,0 +1,9 @@
declare function f<T extends unknown = unknown>(x: { [x: string]: T }): T;
var stooges = [
{ name: "moe", age: 40 },
{ name: "larry", age: 50 },
{ name: "curly", age: 60 }
];
f(stooges); // Should throw

View File

@@ -7,4 +7,4 @@ type Omit1<U, K extends keyof U> = Pick<U, Diff<keyof U, K>>;
type Omit2<T, K extends keyof T> = {[P in Diff<keyof T, K>]: T[P]};
type O = Omit<{ a: number, b: string }, 'a'>
const o: O = { b: '' }
export const o: O = { b: '' }

View File

@@ -0,0 +1,6 @@
// @allowJs: true
// @noEmit: true
// @checkJs: true
// @filename: a.js
exports.a.b.c = 0;

View File

@@ -143,3 +143,5 @@ const Test1 = connect(
null,
mapDispatchToProps
)(TestComponent);
export {};

View File

@@ -0,0 +1,3 @@
// @strictNullChecks: false
declare const v: void;
const {} = v;

View File

@@ -0,0 +1,3 @@
// @strictNullChecks: true
declare const v: void;
const {} = v;

View File

@@ -0,0 +1,9 @@
// @target: es5
// @lib: es2015
// @downlevelIteration: true
// @noEmitHelpers: true
// https://github.com/Microsoft/TypeScript/issues/30653
function * mergeStringLists(...strings: string[]) {
for (var str of strings);
}

View File

@@ -0,0 +1,2 @@
let a: any;
const c = true ? (a) : function() {};

View File

@@ -122,12 +122,12 @@ function f23<T extends unknown>(x: T) {
let y: object = x; // Error
}
// Anything but primitive assignable to { [x: string]: unknown }
// Anything fresh but primitive assignable to { [x: string]: unknown }
function f24(x: { [x: string]: unknown }) {
x = {};
x = { a: 5 };
x = [1, 2, 3];
x = [1, 2, 3]; // Error
x = 123; // Error
}

View File

@@ -28,7 +28,7 @@ edit.deleteAtCaret('constructor(val: T) { }'.length);
verify.quickInfos({
Asig: "constructor A<string>(): A<string>",
Bsig: "constructor B<string>(val: string): B<string>",
Csig: "constructor C<{}>(): C<{}>", // Cannot resolve signature
Csig: "constructor C<unknown>(): C<unknown>", // Cannot resolve signature
Dsig: "constructor D<string>(val: string): D<string>" // Cannot resolve signature
});
@@ -37,6 +37,6 @@ edit.deleteAtCaret("val: T".length);
verify.quickInfos({
Asig: "constructor A<string>(): A<string>",
Bsig: "constructor B<string>(val: string): B<string>",
Csig: "constructor C<{}>(): C<{}>", // Cannot resolve signature
Csig: "constructor C<unknown>(): C<unknown>", // Cannot resolve signature
Dsig: "constructor D<string>(): D<string>"
});

View File

@@ -8,6 +8,6 @@
verify.quickInfos({
1: "var x1: SS<number>",
2: "var x2: SS<{}>",
3: "var x3: SS<{}>"
2: "var x2: SS<unknown>",
3: "var x3: SS<unknown>"
});

View File

@@ -75,8 +75,8 @@ verify.quickInfos({
10: "var r1b: Collection<number, string>",
11: "var r2a: Collection<Collection<number, number>, number>",
12: "var r2b: Collection<Collection<number, number>, number>",
13: "var r3a: Collection<number, {}>",
14: "var r3b: Collection<number, {}>",
13: "var r3a: Collection<number, unknown>",
14: "var r3b: Collection<number, unknown>",
15: "var r4a: Collection<number, any>",
17: "var r5a: Collection<number, Date>",
18: "var r5b: Collection<number, Date>",

View File

@@ -18,5 +18,5 @@
verify.quickInfos({
1: "var n2: N.D2<number>",
2: "var n3: N.D2<{}>"
2: "var n3: N.D2<unknown>"
});

View File

@@ -3,4 +3,4 @@
////function f<T>(a: T): T { return null; }
////f(/**/
verify.signatureHelp({ marker: "", text: "f(a: {}): {}" });
verify.signatureHelp({ marker: "", text: "f(a: unknown): unknown" });

View File

@@ -3,4 +3,4 @@
////var f = <T>(a: T) => a;
////f(/**/
verify.signatureHelp({ marker: "", text: "f(a: {}): {}" });
verify.signatureHelp({ marker: "", text: "f(a: unknown): unknown" });

View File

@@ -17,15 +17,15 @@
////foo7(1, <string>(/*7*/ // signature help shows y as T
verify.signatureHelp(
{ marker: "1", text: "foo1(x: number, callback: (y1: {}) => number): void" },
{ marker: "2", text: "foo2(x: number, callback: (y2: {}) => number): void" },
{ marker: "3", text: "callback(y3: {}): number" },
{ marker: "1", text: "foo1(x: number, callback: (y1: unknown) => number): void" },
{ marker: "2", text: "foo2(x: number, callback: (y2: unknown) => number): void" },
{ marker: "3", text: "callback(y3: unknown): number" },
{ marker: "4", text: "foo4(x: number, callback: (y4: string) => number): void" },
{ marker: "5", text: "callback(y5: string): number" },
);
goTo.marker('6');
verify.signatureHelp({ text: "foo6(x: number, callback: (y6: {}) => number): void" });
verify.signatureHelp({ text: "foo6(x: number, callback: (y6: unknown) => number): void" });
edit.insert('string>(null,null);'); // need to make this line parse so we can get reasonable LS answers to later tests
verify.signatureHelp({ marker: "7", text: "foo7(x: number, callback: (y7: {}) => number): void" });
verify.signatureHelp({ marker: "7", text: "foo7(x: number, callback: (y7: unknown) => number): void" });

View File

@@ -24,15 +24,15 @@
////foo7(1, <string>(/*7*/ // signature help shows y as T
verify.signatureHelp(
{ marker: "1", text: "foo1(x: number, callback: (y1: {}) => number): void" },
{ marker: "2", text: "foo2(x: number, callback: (y2: {}) => number): void" },
{ marker: "3", text: "callback(y3: {}): number" },
{ marker: "1", text: "foo1(x: number, callback: (y1: unknown) => number): void" },
{ marker: "2", text: "foo2(x: number, callback: (y2: unknown) => number): void" },
{ marker: "3", text: "callback(y3: unknown): number" },
{ marker: "4", text: "foo4(x: number, callback: (y4: string) => number): void" },
{ marker: "5", text: "callback(y5: string): number" },
);
goTo.marker('6');
verify.signatureHelp({ text: "foo6(x: number, callback: (y6: {}) => number): void" });
verify.signatureHelp({ text: "foo6(x: number, callback: (y6: unknown) => number): void" });
edit.insert('string>(null,null);'); // need to make this line parse so we can get reasonable LS answers to later tests
verify.signatureHelp({ marker: "7", text: "foo7(x: number, callback: (y7: {}) => number): void" })
verify.signatureHelp({ marker: "7", text: "foo7(x: number, callback: (y7: unknown) => number): void" })

View File

@@ -14,6 +14,6 @@
//// (</*2*/SFC<string>/>);
goTo.marker("1");
verify.signatureHelp({ text: "SFC(_props: Record<string, {}>): string" });
verify.signatureHelp({ text: "SFC(_props: Record<string, unknown>): string" });
goTo.marker("2");
verify.signatureHelp({ text: "SFC(_props: Record<string, string>): string" });

View File

@@ -3,4 +3,4 @@
////declare function f<T>(x: number): T;
////const x/**/ = f();
verify.quickInfoAt("", "const x: {}");
verify.quickInfoAt("", "const x: unknown");

View File

@@ -8,6 +8,6 @@
verify.quickInfos({
1: "var x1: SS<number>",
2: "var x2: SS<{}>",
3: "var x3: SS<{}>"
2: "var x2: SS<unknown>",
3: "var x3: SS<unknown>"
});

View File

@@ -8,6 +8,6 @@
verify.quickInfos({
1: "var x1: SS<number>",
2: "var x2: SS<{}>",
3: "var x3: SS<{}>"
2: "var x2: SS<unknown>",
3: "var x3: SS<unknown>"
});

View File

@@ -9,8 +9,8 @@
verify.signatureHelp(
{ marker: "1", text: "f(x: number, y: string): number" },
{ marker: "2", text: "f(x: boolean, y: string): boolean" },
// too few -- fill in rest with {}
{ marker: "3", text: "f(x: number, y: {}): number" },
// too few -- fill in rest with unknown
{ marker: "3", text: "f(x: number, y: unknown): number" },
// too many -- ignore extra type arguments
{ marker: "4", text: "f(x: number, y: string): number" },
);

View File

@@ -4,4 +4,4 @@
////}
////foo(/*1*/
verify.signatureHelp({ marker: "1", text: "foo(x: number, callback: (x: {}) => number): void" });
verify.signatureHelp({ marker: "1", text: "foo(x: number, callback: (x: unknown) => number): void" });

View File

@@ -9,6 +9,6 @@
verify.signatureHelp(
{ marker: "1", text: "f1(a: any): a is number" },
{ marker: "2", text: "f2(a: any): a is {}" },
{ marker: "2", text: "f2(a: any): a is unknown" },
{ marker: "3", text: "f3(a: any, ...b: any[]): a is number", isVariadic: true },
)

View File

@@ -9,7 +9,7 @@ goTo.marker("1");
edit.insert("(");
verify.signatureHelp({
text: "bar(x: {}, y: {}): {}",
text: "bar(x: unknown, y: unknown): unknown",
triggerReason: {
kind: "characterTyped",
triggerCharacter: "(",

View File

@@ -15,6 +15,6 @@ verify.signatureHelp({ marker: "", overloadsCount: 2 });
edit.insert('a');
verify.signatureHelp({ overloadsCount: 2, text: "B(v: A<number>): A<number>" });
edit.insert('); A.B(');
verify.signatureHelp({ overloadsCount: 2, text: "B(v: A<{}>): A<{}>" });
verify.signatureHelp({ overloadsCount: 2, text: "B(v: A<unknown>): A<unknown>" });
edit.insert('a');
verify.signatureHelp({ overloadsCount: 2, text: "B(v: A<number>): A<number>" });

View File

@@ -1,3 +1,4 @@
{
"types": ["jest"]
"types": ["jest"],
"path": "TypeScript-React-Native-Starter/ExampleProject"
}