@@ -222,6 +222,7 @@ import {
222
222
GetAccessorDeclaration,
223
223
getAliasDeclarationFromName,
224
224
getAllAccessorDeclarations,
225
+ getAllJSDocTags,
225
226
getAllowSyntheticDefaultImports,
226
227
getAncestor,
227
228
getAssignedExpandoInitializer,
@@ -283,7 +284,6 @@ import {
283
284
getJSDocParameterTags,
284
285
getJSDocRoot,
285
286
getJSDocSatisfiesExpressionType,
286
- getJSDocSatisfiesTypeNode,
287
287
getJSDocTags,
288
288
getJSDocThisTag,
289
289
getJSDocType,
@@ -558,6 +558,7 @@ import {
558
558
isJSDocPropertyTag,
559
559
isJSDocReturnTag,
560
560
isJSDocSatisfiesExpression,
561
+ isJSDocSatisfiesTag,
561
562
isJSDocSignature,
562
563
isJSDocTemplateTag,
563
564
isJSDocTypeAlias,
@@ -971,6 +972,7 @@ import {
971
972
tryExtractTSExtension,
972
973
tryGetClassImplementingOrExtendingExpressionWithTypeArguments,
973
974
tryGetExtensionFromPath,
975
+ tryGetJSDocSatisfiesTypeNode,
974
976
tryGetModuleSpecifierFromDeclaration,
975
977
tryGetPropertyAccessOrIdentifierToString,
976
978
TryStatement,
@@ -10231,13 +10233,13 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
10231
10233
// not a parameter of a contextually typed function
10232
10234
if (hasOnlyExpressionInitializer(declaration) && !!declaration.initializer) {
10233
10235
if (isInJSFile(declaration)) {
10234
- const initializer = declaration.initializer;
10235
- if (!isJSDocSatisfiesExpression(initializer)) {
10236
- const typeNode = getJSDocSatisfiesTypeNode (declaration);
10237
- if (typeNode) {
10238
- return checkSatisfiesExpressionWorker(initializer, typeNode, checkMode);
10239
- }
10240
- }
10236
+ // const initializer = declaration.initializer;
10237
+ // if (!isJSDocSatisfiesExpression(initializer)) {
10238
+ // const typeNode = tryGetJSDocSatisfiesTypeNode (declaration);
10239
+ // if (typeNode) {
10240
+ // return checkSatisfiesExpressionWorker(initializer, typeNode, checkMode);
10241
+ // }
10242
+ // }
10241
10243
if (!isParameter(declaration)) {
10242
10244
const containerObjectType = getJSContainerObjectType(declaration, getSymbolOfDeclaration(declaration), getDeclaredExpandoInitializer(declaration));
10243
10245
if (containerObjectType) {
@@ -28169,7 +28171,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
28169
28171
}
28170
28172
28171
28173
function getContextualTypeForVariableLikeDeclaration(declaration: VariableLikeDeclaration, contextFlags: ContextFlags | undefined): Type | undefined {
28172
- const typeNode = getEffectiveTypeAnnotationNode(declaration) || (isInJSFile(declaration) ? getJSDocSatisfiesTypeNode (declaration) : undefined);
28174
+ const typeNode = getEffectiveTypeAnnotationNode(declaration) || (isInJSFile(declaration) ? tryGetJSDocSatisfiesTypeNode (declaration) : undefined);
28173
28175
if (typeNode) {
28174
28176
return getTypeFromTypeNode(typeNode);
28175
28177
}
@@ -36228,6 +36230,13 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
36228
36230
contextualType?: Type | undefined
36229
36231
) {
36230
36232
const initializer = getEffectiveInitializer(declaration)!;
36233
+ if (isInJSFile(declaration)) {
36234
+ const typeNode = tryGetJSDocSatisfiesTypeNode(declaration);
36235
+ if (typeNode) {
36236
+ // const tags = getAllJSDocTags
36237
+ return checkSatisfiesExpressionWorker(initializer, typeNode, checkMode);
36238
+ }
36239
+ }
36231
36240
const type = getQuickTypeOfExpression(initializer) ||
36232
36241
(contextualType ?
36233
36242
checkExpressionWithContextualType(initializer, contextualType, /*inferenceContext*/ undefined, checkMode || CheckMode.Normal)
@@ -38850,6 +38859,16 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
38850
38859
38851
38860
function checkJSDocSatisfiesTag(node: JSDocSatisfiesTag) {
38852
38861
checkSourceElement(node.typeExpression);
38862
+ const host = getEffectiveJSDocHost(node);
38863
+ if (host) {
38864
+ const tags = getAllJSDocTags(host, isJSDocSatisfiesTag);
38865
+ if (length(tags) > 1) {
38866
+ for (let i = 1; i < length(tags); i++) {
38867
+ const tagName = tags[i].tagName;
38868
+ error(tagName, Diagnostics._0_tag_already_specified, idText(tagName));
38869
+ }
38870
+ }
38871
+ }
38853
38872
}
38854
38873
38855
38874
function checkJSDocLinkLikeTag(node: JSDocLink | JSDocLinkCode | JSDocLinkPlain) {
0 commit comments