feat: 全面清理类型错误 — tsc 零错误,any 标注全部消除

- 修复所有 33 个原始 tsc 编译错误(ink JSX 声明、类型不匹配、null check 等)
- 清理 176 处 `: any` 类型标注,全部替换为具体推断类型
- 修复清理过程中引入的 41 个回归错误
- 最终结果:0 tsc 错误,0 个非注释 any 标注
- Build 验证通过(25.75MB bundle)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
claude-code-best
2026-04-01 01:00:10 +08:00
parent 58f1bd49cb
commit fac9341e73
129 changed files with 555 additions and 252 deletions

View File

@@ -2079,7 +2079,7 @@ async function* queryModel(
})
throw new Error('Content block is not a connector_text block')
}
contentBlock.connector_text += delta.connector_text
;(contentBlock as { connector_text: string }).connector_text += delta.connector_text
} else {
switch (delta.type) {
case 'citations_delta':
@@ -2123,7 +2123,7 @@ async function* queryModel(
})
throw new Error('Content block is not a text block')
}
contentBlock.text += delta.text
;(contentBlock as { text: string }).text += delta.text
break
case 'signature_delta':
if (
@@ -2158,7 +2158,7 @@ async function* queryModel(
})
throw new Error('Content block is not a thinking block')
}
contentBlock.thinking += delta.thinking
;(contentBlock as { thinking: string }).thinking += delta.thinking
break
}
}

View File

@@ -159,7 +159,7 @@ export async function getAnthropicClient({
? process.env.ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION
: getAWSRegion()
const bedrockArgs: any = {
const bedrockArgs: Record<string, unknown> = {
...ARGS,
awsRegion,
...(isEnvTruthy(process.env.CLAUDE_CODE_SKIP_BEDROCK_AUTH) && {
@@ -173,7 +173,7 @@ export async function getAnthropicClient({
bedrockArgs.skipAuth = true
// Add the Bearer token for Bedrock API key authentication
bedrockArgs.defaultHeaders = {
...bedrockArgs.defaultHeaders,
...(bedrockArgs.defaultHeaders as Record<string, string> | undefined),
Authorization: `Bearer ${process.env.AWS_BEARER_TOKEN_BEDROCK}`,
}
} else if (!isEnvTruthy(process.env.CLAUDE_CODE_SKIP_BEDROCK_AUTH)) {

View File

@@ -459,7 +459,7 @@ export async function checkResponseForCacheBreak(
// assistant message timestamp in the messages array (before the current response)
const lastAssistantMessage = messages.findLast(m => m.type === 'assistant')
const timeSinceLastAssistantMsg = lastAssistantMessage
? Date.now() - new Date(lastAssistantMessage.timestamp).getTime()
? Date.now() - new Date(lastAssistantMessage.timestamp as string | number).getTime()
: null
// Skip the first call — no previous value to compare against

View File

@@ -232,7 +232,7 @@ export async function getSessionLogs(
// Update our lastUuid to the last entry's UUID
const lastEntry = logs.at(-1)
if (lastEntry && 'uuid' in lastEntry && lastEntry.uuid) {
lastUuidMap.set(sessionId, lastEntry.uuid as string)
lastUuidMap.set(sessionId, lastEntry.uuid as UUID)
}
}

View File

@@ -1,2 +1,2 @@
// Auto-generated type stub — replace with real implementation
export type isConnectorTextBlock = any;
export type isConnectorTextBlock = (block: unknown) => boolean;

View File

@@ -1,4 +1,4 @@
// Auto-generated type stub — replace with real implementation
export type EffortValue = any;
export type modelSupportsEffort = any;
export type EffortLevel = any;
export type EffortValue = 'low' | 'medium' | 'high' | 'max' | number;
export type modelSupportsEffort = (model: string) => boolean;
export type EffortLevel = 'low' | 'medium' | 'high' | 'max';