mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
fixStrictClassInitialization: Don't provide a default for string or number (#24767)
* fixStrictClassInitialization: Don't provide a default for `string` or `number` * Update baselines
This commit is contained in:
@@ -282,6 +282,8 @@ namespace ts {
|
||||
createPromiseType,
|
||||
createArrayType,
|
||||
getBooleanType: () => booleanType,
|
||||
getFalseType: () => falseType,
|
||||
getTrueType: () => trueType,
|
||||
getVoidType: () => voidType,
|
||||
getUndefinedType: () => undefinedType,
|
||||
getNullType: () => nullType,
|
||||
@@ -374,9 +376,9 @@ namespace ts {
|
||||
const nullWideningType = strictNullChecks ? nullType : createIntrinsicType(TypeFlags.Null | TypeFlags.ContainsWideningType, "null");
|
||||
const stringType = createIntrinsicType(TypeFlags.String, "string");
|
||||
const numberType = createIntrinsicType(TypeFlags.Number, "number");
|
||||
const trueType = createIntrinsicType(TypeFlags.BooleanLiteral, "true");
|
||||
const falseType = createIntrinsicType(TypeFlags.BooleanLiteral, "false");
|
||||
const booleanType = createBooleanType([trueType, falseType]);
|
||||
const trueType = createIntrinsicType(TypeFlags.BooleanLiteral, "true");
|
||||
const booleanType = createBooleanType([falseType, trueType]);
|
||||
const esSymbolType = createIntrinsicType(TypeFlags.ESSymbol, "symbol");
|
||||
const voidType = createIntrinsicType(TypeFlags.Void, "void");
|
||||
const neverType = createIntrinsicType(TypeFlags.Never, "never");
|
||||
|
||||
@@ -3016,6 +3016,8 @@ namespace ts {
|
||||
/* @internal */ getStringType(): Type;
|
||||
/* @internal */ getNumberType(): Type;
|
||||
/* @internal */ getBooleanType(): Type;
|
||||
/* @internal */ getFalseType(): Type;
|
||||
/* @internal */ getTrueType(): Type;
|
||||
/* @internal */ getVoidType(): Type;
|
||||
/* @internal */ getUndefinedType(): Type;
|
||||
/* @internal */ getNullType(): Type;
|
||||
|
||||
@@ -109,14 +109,8 @@ namespace ts.codefix {
|
||||
}
|
||||
|
||||
function getDefaultValueFromType (checker: TypeChecker, type: Type): Expression | undefined {
|
||||
if (type.flags & TypeFlags.String) {
|
||||
return createLiteral("");
|
||||
}
|
||||
else if (type.flags & TypeFlags.Number) {
|
||||
return createNumericLiteral("0");
|
||||
}
|
||||
else if (type.flags & TypeFlags.Boolean) {
|
||||
return createFalse();
|
||||
if (type.flags & TypeFlags.BooleanLiteral) {
|
||||
return type === checker.getFalseType() ? createFalse() : createTrue();
|
||||
}
|
||||
else if (type.isLiteral()) {
|
||||
return createLiteral(type.value);
|
||||
|
||||
@@ -38,11 +38,11 @@ class FetchUser extends React.Component<IFetchUserProps, any> {
|
||||
|
||||
? this.props.children(this.state.result)
|
||||
>this.props.children(this.state.result) : JSX.Element
|
||||
>this.props.children : ((user: IUser) => JSX.Element) | (((user: IUser) => JSX.Element) & string) | (((user: IUser) => JSX.Element) & number) | (((user: IUser) => JSX.Element) & true) | (((user: IUser) => JSX.Element) & false) | (((user: IUser) => JSX.Element) & React.ReactElement<any>) | (((user: IUser) => JSX.Element) & (string | number | boolean | any[] | React.ReactElement<any>)[])
|
||||
>this.props.children : ((user: IUser) => JSX.Element) | (((user: IUser) => JSX.Element) & string) | (((user: IUser) => JSX.Element) & number) | (((user: IUser) => JSX.Element) & false) | (((user: IUser) => JSX.Element) & true) | (((user: IUser) => JSX.Element) & React.ReactElement<any>) | (((user: IUser) => JSX.Element) & (string | number | boolean | any[] | React.ReactElement<any>)[])
|
||||
>this.props : IFetchUserProps & { children?: React.ReactNode; }
|
||||
>this : this
|
||||
>props : IFetchUserProps & { children?: React.ReactNode; }
|
||||
>children : ((user: IUser) => JSX.Element) | (((user: IUser) => JSX.Element) & string) | (((user: IUser) => JSX.Element) & number) | (((user: IUser) => JSX.Element) & true) | (((user: IUser) => JSX.Element) & false) | (((user: IUser) => JSX.Element) & React.ReactElement<any>) | (((user: IUser) => JSX.Element) & (string | number | boolean | any[] | React.ReactElement<any>)[])
|
||||
>children : ((user: IUser) => JSX.Element) | (((user: IUser) => JSX.Element) & string) | (((user: IUser) => JSX.Element) & number) | (((user: IUser) => JSX.Element) & false) | (((user: IUser) => JSX.Element) & true) | (((user: IUser) => JSX.Element) & React.ReactElement<any>) | (((user: IUser) => JSX.Element) & (string | number | boolean | any[] | React.ReactElement<any>)[])
|
||||
>this.state.result : any
|
||||
>this.state : any
|
||||
>this : this
|
||||
|
||||
@@ -38,11 +38,11 @@ class FetchUser extends React.Component<IFetchUserProps, any> {
|
||||
|
||||
? this.props.children(this.state.result)
|
||||
>this.props.children(this.state.result) : JSX.Element
|
||||
>this.props.children : ((user: IUser) => JSX.Element) | (((user: IUser) => JSX.Element) & string) | (((user: IUser) => JSX.Element) & number) | (((user: IUser) => JSX.Element) & true) | (((user: IUser) => JSX.Element) & false) | (((user: IUser) => JSX.Element) & React.ReactElement<any>) | (((user: IUser) => JSX.Element) & (string | number | boolean | any[] | React.ReactElement<any>)[])
|
||||
>this.props.children : ((user: IUser) => JSX.Element) | (((user: IUser) => JSX.Element) & string) | (((user: IUser) => JSX.Element) & number) | (((user: IUser) => JSX.Element) & false) | (((user: IUser) => JSX.Element) & true) | (((user: IUser) => JSX.Element) & React.ReactElement<any>) | (((user: IUser) => JSX.Element) & (string | number | boolean | any[] | React.ReactElement<any>)[])
|
||||
>this.props : IFetchUserProps & { children?: React.ReactNode; }
|
||||
>this : this
|
||||
>props : IFetchUserProps & { children?: React.ReactNode; }
|
||||
>children : ((user: IUser) => JSX.Element) | (((user: IUser) => JSX.Element) & string) | (((user: IUser) => JSX.Element) & number) | (((user: IUser) => JSX.Element) & true) | (((user: IUser) => JSX.Element) & false) | (((user: IUser) => JSX.Element) & React.ReactElement<any>) | (((user: IUser) => JSX.Element) & (string | number | boolean | any[] | React.ReactElement<any>)[])
|
||||
>children : ((user: IUser) => JSX.Element) | (((user: IUser) => JSX.Element) & string) | (((user: IUser) => JSX.Element) & number) | (((user: IUser) => JSX.Element) & false) | (((user: IUser) => JSX.Element) & true) | (((user: IUser) => JSX.Element) & React.ReactElement<any>) | (((user: IUser) => JSX.Element) & (string | number | boolean | any[] | React.ReactElement<any>)[])
|
||||
>this.state.result : any
|
||||
>this.state : any
|
||||
>this : this
|
||||
|
||||
@@ -12,15 +12,15 @@
|
||||
////
|
||||
//// class T {
|
||||
////
|
||||
//// a: string;
|
||||
//// a: boolean;
|
||||
////
|
||||
//// static b: string;
|
||||
//// static b: boolean;
|
||||
////
|
||||
//// private c: string;
|
||||
//// private c: boolean;
|
||||
////
|
||||
//// d: number | undefined;
|
||||
////
|
||||
//// e: string | number;
|
||||
//// e: string | boolean;
|
||||
////
|
||||
//// f: 1;
|
||||
////
|
||||
@@ -46,9 +46,9 @@ function fixes(name: string, type: string, options: { isPrivate?: boolean, noIni
|
||||
}
|
||||
|
||||
verify.codeFixAvailable([
|
||||
...fixes("a", "string"),
|
||||
...fixes("c", "string", { isPrivate: true }),
|
||||
...fixes("e", "string | number"),
|
||||
...fixes("a", "boolean"),
|
||||
...fixes("c", "boolean", { isPrivate: true }),
|
||||
...fixes("e", "string | boolean"),
|
||||
...fixes("f", "1"),
|
||||
...fixes("g", '"123" | "456"'),
|
||||
...fixes("h", "boolean"),
|
||||
|
||||
@@ -3,13 +3,13 @@
|
||||
// @strict: true
|
||||
|
||||
//// class T {
|
||||
//// a: string;
|
||||
//// a: boolean;
|
||||
//// }
|
||||
|
||||
verify.codeFix({
|
||||
description: `Add initializer to property 'a'`,
|
||||
newFileContent: `class T {
|
||||
a: string = "";
|
||||
a: boolean = false;
|
||||
}`,
|
||||
index: 2
|
||||
})
|
||||
@@ -1,15 +0,0 @@
|
||||
/// <reference path='fourslash.ts' />
|
||||
|
||||
// @strict: true
|
||||
|
||||
//// class T {
|
||||
//// a: number;
|
||||
//// }
|
||||
|
||||
verify.codeFix({
|
||||
description: `Add initializer to property 'a'`,
|
||||
newFileContent: `class T {
|
||||
a: number = 0;
|
||||
}`,
|
||||
index: 2
|
||||
})
|
||||
@@ -3,13 +3,13 @@
|
||||
// @strict: true
|
||||
|
||||
//// class T {
|
||||
//// a: string | number;
|
||||
//// a: string | boolean;
|
||||
//// }
|
||||
|
||||
verify.codeFix({
|
||||
description: `Add initializer to property 'a'`,
|
||||
newFileContent: `class T {
|
||||
a: string | number = "";
|
||||
a: string | boolean = false;
|
||||
}`,
|
||||
index: 2
|
||||
})
|
||||
@@ -12,15 +12,15 @@
|
||||
////
|
||||
//// class T {
|
||||
////
|
||||
//// a: string;
|
||||
//// a: boolean;
|
||||
////
|
||||
//// static b: string;
|
||||
//// static b: boolean;
|
||||
////
|
||||
//// private c: string;
|
||||
//// private c: boolean;
|
||||
////
|
||||
//// d: number | undefined;
|
||||
////
|
||||
//// e: string | number;
|
||||
//// e: string | boolean;
|
||||
////
|
||||
//// f: 1;
|
||||
////
|
||||
@@ -50,15 +50,15 @@ class Foo {}
|
||||
|
||||
class T {
|
||||
|
||||
a: string = "";
|
||||
a: boolean = false;
|
||||
|
||||
static b: string;
|
||||
static b: boolean;
|
||||
|
||||
private c: string = "";
|
||||
private c: boolean = false;
|
||||
|
||||
d: number | undefined;
|
||||
|
||||
e: string | number = "";
|
||||
e: string | boolean = false;
|
||||
|
||||
f: 1 = 1;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user