跳到内容
当前位置:首页>考研真题>Typescript 基础复习 - 速通版

Typescript 基础复习 - 速通版

  • 2026-10-10 04:49:01
Typescript 基础复习 - 速通版
1. TypeScript 是什么 & 与 JavaScript 的区别

TS 是 JS 的超集,在 JS 之上加了一层静态类型系统,由编译器(tsc)在编译期做类型检查,最终擦除类型、编译成纯 JS 运行。

维度
JavaScript
TypeScript
类型检查
运行时动态检查,报错才暴露
编译期静态检查,写代码就报错
类型标注
无
可选注解 + 自动推断
运行产物
直接跑
需 tsc / esbuild / babel 编译成 JS
大型项目
重构易错、隐式 contract
接口契约清晰,重构安全
新增能力
—
接口、泛型、枚举、工具类型、装饰器(实验)等

TS 并不改变 JS 运行时行为——所有类型在编译后都被擦除,它是给开发者和编译器看的'文档 + 校验器',不影响线上性能。

2. 基础类型一览
// 原始类型let name: string = "Tom";let age: number = 18;let isAdmin: boolean = true;// 数组:两种写法let list1: number[] = [1, 2, 3];let list2: Array<number> = [1, 2, 3];// 元组 Tuple:固定长度、各位置类型已知let pair: [string, number] = ["id", 42];// 空值类let u: undefined = undefined;let n: null = null;function log(): void { console.log("hi"); }// 任意类型(尽量少用)let anything: any = 1;anything = "now string"; // 不报错——绕过了类型检查

number 不区分 int/float(和 JS 一样都是双精度);string 包含模板字符串;没有独立的 integer 类型。

3. 类型注解 vs 类型推断

类型注解(Annotation)

// 开发者显式写明类型function greet(name: string): string {  return `Hello, ${name}`;}

类型推断(Inference)

// 编译器自动推导,不用写let x = 1;        // 推断为 numberlet arr = [1, 2]; // 推断为 number[]// 推断不出时必须显式标注:let v;     // 推断为 any(strict 下 noImplicitAny 会报错)function add(a: number, b: number) { return a + b; }// 返回值也能推断,但公共 API 建议显式写 return 类型

变量初始化时能推断 → 不写

函数参数、函数返回值、公共接口/导出类型 → 显式写

4. interface 和 type 怎么选

优先 interface,需要联合/交叉/元组/字面量时用 type

能力
interface
type(类型别名)
描述对象形状
✅
✅
扩展(extends)
interface B extends A
用交叉类型 A & B
声明合并
✅ 同名自动合并(可被扩展)
❌ 重复定义直接报错
联合类型 / 交叉
❌
✅ A | B、A & B
元组 / 基本类型别名 / 字面量
❌
✅
映射类型 / 条件类型
❌
✅
被 class implements
✅
✅(对象形状时)
// interface 可声明合并(同名多次声明会合并)——常用于扩展第三方库interface Window { myPlugin: Plugin }interface Window { other: string } // 合并,不报错// type 能做 interface 做不了的事type ID = string | number;          // 联合type Point = { x: number } & { y: number }; // 交叉type Gender = "male" | "female";      // 字面量联合type Pair = [string, number];          // 元组

两者都能描述对象;interface 开放、可合并、适合公共契约;type 表达力更强(联合/交叉/元组/字面量),但不能重复声明。日常对象形状优先 interface。

5. 联合类型 / 交叉类型 / 字面量类型

联合类型 A | B:取其一

function printId(id: string | number) {  console.log(id);}

交叉类型 A & B:同时具备所有成员

type WithName = { name: string };type WithAge  = { age: number };type Person = WithName & WithAge;// { name: string; age: number }

字面量类型:把"值"本身当类型

let dir: "up" | "down" | "left" | "right";dir = "up";   // OK// dir = "middle"; // 报错——只能取这四个字面量之一const n = 42;    // const 推断为字面量类型 42let  m = 42;     // let 推断为 number(可变)

联合是 "或"(OR,缩小取值范围),交叉是 "且"(AND,合并属性)。字面量类型常用于开关、状态、方向。

6. 函数类型与重载(函数重载)
同一个函数,根据参数个数 / 类型不同,返回不同类型
// 完整标注:(参数) => 返回值type Add = (a: number, b: number) => number;const add: Add = (a, b) => a + b;// 可选参数 ? / 默认值 / 剩余参数function fn(a: string, b?: number, c: boolean = false, ...rest: string[]) {}// 函数重载:同一个函数根据入参返回不同类型// 【1】重载签名(只写类型,没有函数体):多个,供 TS 做类型匹配function format(input: string): string;function format(input: number): string[];// 【2】实现签名(带函数体):只能有 1 个,必须兼容上面所有重载签名function format(input: string | number): string | string[] {  // 实现签名(对外不可见)  return typeof input === "string" ? input : [`#${input}`];}

重载的实现签名对调用者不可见;调用方只看上面的重载签名。

用联合类型 + 类型收窄常常能代替重载,但`重载的表达能力更强`(对外提供清晰的类型定义)

7. 泛型 Generics

类型也能"参数化" —— 复用、又不丢失类型信息

// 不用泛型:丢失类型function identity1(arg: any): any { return arg; }// 用泛型 T:传入什么类型,返回就是什么类型function identity<T>(arg: T): T { return arg; }const s = identity<string>("hi"); // s: string// 泛型约束 extends:要求 T 至少有某些结构function len<T extends { length: number }>(x: T): number {  return x.length;}// 常见用法:泛型函数 / 泛型接口 / 泛型工具类型interface ApiResponse<T> {  code: number;  data: T;  msg: string;}type UserResp = ApiResponse<{ id: number; name: string }>;

「泛型和 any 区别?」—— any 抛弃类型检查;泛型保留了输入与输出的类型关联,调用方拿到的是精确类型。

8. 枚举 enum
// 数字枚举:默认从 0 自增,可手动指定enum Direction { Up = 1, Down, Left, Right }// Up=1, Down=2, Left=3, Right=4// 字符串枚举:可读性好,序列化友好enum OrderStatus {  PENDING = "PENDING",  PAID    = "PAID",  SHIPPED = "SHIPPED",}// 常量枚举:编译时内联,不生成对象,体积更小const enum Color { Red, Green, Blue }// 相当于:const enum Color {  Red,    // 0 (默认从0开始自增)  Green,  // 1  Blue    // 2}// 也可以手动赋值:const enum Color {  Red = 10,  Green, // 11  Blue = 20}

社区越来越倾向用 联合字面量类型 + as const 代替 enum,

因为 enum 会生成运行时代码、且存在双向映射(数字枚举可由值反查键)带来的意外。

enum Color { Red = 0, Green = 1 }// 编译后 JS 对象是双向的:// Color[0] = "Red";// Color["Red"] = 0;const val = Color[0]; // ✅ 运行时可以拿到 "Red"

新项目可优先:

const Colors = ['red','green'] as const; // readonly ["red", "green"]type Color = typeof Colors[number]; //  "red" | "green"

1. `typeof Colors`:拿到上面常量的类型 → `readonly ["red", "green"]`

2. `[number]`:索引访问类型

数组 / 元组的索引类型是 `number`;

`T[number]` 的含义:取出类型 T 里 所有元素的类型,合并成联合类型

type T = readonly ["red", "green"];type Color = T[number]; // 等价于 "red" | "green"

9. 类型断言 / 类型守卫 / 类型收窄

类型断言(Type Assertion) as:你比编译器更确定类型

const el = document.querySelector("#name") as HTMLInputElement;el.value; // 断言后能访问 value// 另一种写法(在 .tsx 里必须用 as,避免 <> 被当成 JSX)const s = <string>input;// 相当于:const s = input as string

断言只是"哄骗"编译器,不做真实转换。x as number 不会把字符串变成数字,运行时类型错了照样炸。不确定时用类型守卫。

类型守卫 / 收窄:让编译器在分支里自动缩窄类型

// typeof 守卫function toUpper(x: string | number) {  if (typeof x === "string") {    x.toUpperCase(); // 这里 x 被收窄为 string  }}// instanceof / in 守卫if (x instanceof Date) x.getFullYear();if ("id" in obj) obj.id;// 自定义类型谓词 (value is Type)function isString(v: unknown): v is string {  return typeof v === "string";}
通过类型守卫来达到类型收窄的目的,通过类型谓词来自定义类型守卫。

1. 内置类型守卫:`typeof` / `instanceof` / `in`,TS 原生识别

2. 自定义类型守卫:自己写函数,返回 `value is Type`时为 true

10. 内置工具类型 Utility Types

工具类型
作用
一句话实现原理
Partial<T>
所有属性变可选
{ [K in keyof T]?: T[K] }
Required<T>
所有属性变必填
去掉 ?(-?)
Readonly<T>
所有属性只读
每个属性前加 readonly
Pick<T, K>
挑出部分属性
{ [P in K]: T[P] }
Omit<T, K>
去掉部分属性
Pick<T, Exclude<keyof T, K>>
Record<K, V>
构造键值对象类型
{ [P in K]: V }
Exclude<U, Ex>
联合类型中排除某些
条件类型 U extends Ex ? never : U
Extract<U, U2>
保留可赋值给 U2 的成员
U extends U2 ? U : never
NonNullable<T>
去掉 null / undefined
T extends null | undefined ? never : T
ReturnType<F>
取函数返回值类型
F extends (...args) => infer R ? R : never
interface User {   id: number;   name: string;   email: string }type UserUpdate = Partial<User>;          // 全可选type UserName   = Pick<User, "id" | "name">; // 只留 id, nametype UserNoMail = Omit<User, "email">;    // 去掉 emailtype UserMap    = Record<number, User>;     // { [id]: User }

keyof T(取所有键的联合)、in(遍历)、

infer R(类型推导,在条件类型里"抽出"某个类型变量)

`infer` 是在条件类型 `T extends ... ? A : B` 的 `extends` 分支里,用来「推导、提取」一个类型变量的关键字。

infer 只能用在 条件类型的 true 分支 里,不能单独使用

1) 提取函数返回类型

// 内置 ReturnType 实现,提取函数返回类型type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
T extends (...args: any[]) => infer R  // 判断 T 是否是函数类型
2)提取 Promise 内部类型(Awaited)
type MyAwaited<T> = T extends Promise<infer V> ? V : T;type P = Promise<number>;// 拿到 Promise 包裹的类型type Res = MyAwaited<P>; // number// 不是 promisetype Res2 = MyAwaited<string>; // string
3)提取函数参数类型(Parameters)
type MyParameters<T> = T extends (...args: infer Args) => any ? Args : never;type Fn = (a: number, b: string) => void;type Params = MyParameters<Fn>; // [number, string]
4)提取数组元素类型
type GetArrayItem<T> = T extends (infer Item)[] ? Item : T;type T1 = GetArrayItem<string[]>; // stringtype T2 = GetArrayItem<number[]>; // numbertype T3 = GetArrayItem<boolean>; // boolean
11. any 、 unknown 、 never 、 void
unknown 
和 any 最大区别:不能直接操作,不能随便赋值给其他类型,必须先做类型收窄。
let u: unknown = 123;u.length; // ❌ 报错!不能直接访问属性let s: string = u; // ❌ 不能直接赋值// ✅ 必须收窄后才能使用if (typeof u === "string") {  let s: string = u;  console.log(u.length);}
never 永远不会出现的值
// 场景1:抛出异常,永远没有返回值 → neverfunction crash(): never {  throw new Error("boom");}// 场景2:死循环,永远不会返回function loop(): never {  while(true) {}}

never 用于穷尽性检查(exhaustive check):保证联合类型所有分支都被处理。如果漏写分支,TS 就会报类型错误。

type Shape =   | { type: "circle"; r: number }  | { type: "square"; size: number }  | { type: "rect"; w: number; h: number };function getArea(shape: Shape) {  switch (shape.type) {    case "circle":      return Math.PI * shape.r **2;    case "square":      return shape.size **2;    case "rect":      return shape.w * shape.h;    default:      // ✅ 穷尽检查      const _exhaustiveCheck: never = shape;      throw new Error(`unknown shape: ${JSON.stringify(_exhaustiveCheck)}`);  }}

void 函数 没有 有效返回值

// 不写return,返回voidfunction log(): void {  console.log("hi");}// 可以return undefined,合法function log2(): void {  return undefined;}// ❌ 不能return其他值function log3(): void {  return 123;}

小结:any 是关掉检查;  unknown 是开着检查但要求你先收窄再用;  never 表示'不可能到达',用于穷尽判断;  void 表示函数没返回值。

12. 结构类型系统(鸭子类型)

interfacePoint{ x: number; y: number }functiondraw(p: Point) {   console.log(p.x, p.y); }const obj = { x: 1, y: 2, z: 3 }; // 多了个 z,仍然兼容draw(obj); // OK:形状足够// 但对象字面量直接传会触发"多余属性检查"(excess property check)draw({ x:1, y:2, z:3 }); // 报错:对象字面量只能指定已知属性

结构类型 = "如果它走起来像鸭子、叫起来像鸭子,那它就是鸭子"。这也是 TS 能和普通 JS 对象无缝协作的原因。

13. tsconfig.json 常用项

项目里怎么配的 strict ?

选项
作用
strict
一键开启所有严格检查(强烈建议开)
noImplicitAny
不允许隐式 any(参数没标类型且推断不出来时报错)
strictNullChecksnull
/undefined 不能赋给其他类型,必须显式收窄
strictFunctionTypes
更严格的函数参数类型检查(抗逆变)
target
编译出的 JS 语法目标(esnext / es2017)
module
模块系统(ESNext / CommonJS)
outDir / rootDir
编译输出目录
sourceMap
生成 .map 便于调试
declaration
生成 .d.ts 类型声明(写库时必开)
esModuleInterop
允许 import React from 'react' 这种默认导入写法
skipLibCheck
跳过 .d.ts 之间的类型检查,加快编译

strict = true 会自动开启下面所有选项:

{  "compilerOptions": {    "strict": true,    // 下面这些全部自动启用    "noImplicitAny": true,    "noImplicitThis": true,    "strictNullChecks": true,    "strictFunctionTypes": true,    "strictPropertyInitialization": true,    "strictBindCallApply": true,    "useUnknownInCatchVariables": true,    "alwaysStrict": true  }}

⭐ strictNullChecks

默认关闭时:`string` 类型变量 可以赋值 null /undefined。

开启后:`string`  不包含 null、undefined,必须显式写联合类型 `string | null`。

 解决大量空值导致的运行时报错,是 strict 里价值最高的一项之一。

后续再介绍 zod 相关的结合 AI 结构化输出 等内容。

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-10-10 05:49:00 HTTP/1.1 GET : http://www.sjds.net/a/521438.html
  2. 运行时间 : 0.086199s [ 吞吐率:11.60req/s ] 内存消耗:4,453.39kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=03b3909033768942fb5439ca7fa79cfe
  1. /www/wwwroot/www.sjds.net/public/index.php ( 0.79 KB )
  2. /www/wwwroot/www.sjds.net/vendor/autoload.php ( 0.17 KB )
  3. /www/wwwroot/www.sjds.net/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /www/wwwroot/www.sjds.net/vendor/composer/platform_check.php ( 0.90 KB )
  5. /www/wwwroot/www.sjds.net/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /www/wwwroot/www.sjds.net/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /www/wwwroot/www.sjds.net/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /www/wwwroot/www.sjds.net/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /www/wwwroot/www.sjds.net/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /www/wwwroot/www.sjds.net/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /www/wwwroot/www.sjds.net/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /www/wwwroot/www.sjds.net/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /www/wwwroot/www.sjds.net/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /www/wwwroot/www.sjds.net/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /www/wwwroot/www.sjds.net/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /www/wwwroot/www.sjds.net/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /www/wwwroot/www.sjds.net/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /www/wwwroot/www.sjds.net/app/provider.php ( 0.19 KB )
  23. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /www/wwwroot/www.sjds.net/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /www/wwwroot/www.sjds.net/app/common.php ( 0.03 KB )
  27. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /www/wwwroot/www.sjds.net/config/app.php ( 0.95 KB )
  30. /www/wwwroot/www.sjds.net/config/cache.php ( 0.78 KB )
  31. /www/wwwroot/www.sjds.net/config/console.php ( 0.23 KB )
  32. /www/wwwroot/www.sjds.net/config/cookie.php ( 0.56 KB )
  33. /www/wwwroot/www.sjds.net/config/database.php ( 2.48 KB )
  34. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /www/wwwroot/www.sjds.net/config/filesystem.php ( 0.61 KB )
  36. /www/wwwroot/www.sjds.net/config/lang.php ( 0.91 KB )
  37. /www/wwwroot/www.sjds.net/config/log.php ( 1.35 KB )
  38. /www/wwwroot/www.sjds.net/config/middleware.php ( 0.19 KB )
  39. /www/wwwroot/www.sjds.net/config/route.php ( 1.89 KB )
  40. /www/wwwroot/www.sjds.net/config/session.php ( 0.57 KB )
  41. /www/wwwroot/www.sjds.net/config/trace.php ( 0.34 KB )
  42. /www/wwwroot/www.sjds.net/config/view.php ( 0.82 KB )
  43. /www/wwwroot/www.sjds.net/app/event.php ( 0.25 KB )
  44. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /www/wwwroot/www.sjds.net/app/service.php ( 0.13 KB )
  46. /www/wwwroot/www.sjds.net/app/AppService.php ( 0.26 KB )
  47. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /www/wwwroot/www.sjds.net/vendor/services.php ( 0.14 KB )
  53. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /www/wwwroot/www.sjds.net/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /www/wwwroot/www.sjds.net/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /www/wwwroot/www.sjds.net/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /www/wwwroot/www.sjds.net/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /www/wwwroot/www.sjds.net/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /www/wwwroot/www.sjds.net/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /www/wwwroot/www.sjds.net/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /www/wwwroot/www.sjds.net/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /www/wwwroot/www.sjds.net/app/Request.php ( 0.09 KB )
  84. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /www/wwwroot/www.sjds.net/app/middleware.php ( 0.25 KB )
  86. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /www/wwwroot/www.sjds.net/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /www/wwwroot/www.sjds.net/route/app.php ( 1.72 KB )
  100. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /www/wwwroot/www.sjds.net/app/controller/Index.php ( 4.81 KB )
  104. /www/wwwroot/www.sjds.net/app/BaseController.php ( 2.05 KB )
  105. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /www/wwwroot/www.sjds.net/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /www/wwwroot/www.sjds.net/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /www/wwwroot/www.sjds.net/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /www/wwwroot/www.sjds.net/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /www/wwwroot/www.sjds.net/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /www/wwwroot/www.sjds.net/runtime/temp/022a5b1eae5a9e3c31e54f699d8ae600.php ( 8.05 KB )
  140. /www/wwwroot/www.sjds.net/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000820s ] mysql:host=172.18.0.4;port=3306;dbname=www_sjds;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000906s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000495s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000323s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000524s ]
  6. SELECT * FROM `set` [ RunTime:0.000276s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000626s ]
  8. SELECT * FROM `article` WHERE `id` = 521438 LIMIT 1 [ RunTime:0.000465s ]
  9. UPDATE `article` SET `lasttime` = 1791582540 WHERE `id` = 521438 [ RunTime:0.002063s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 65 LIMIT 1 [ RunTime:0.000352s ]
  11. SELECT * FROM `article` WHERE `id` < 521438 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000431s ]
  12. SELECT * FROM `article` WHERE `id` > 521438 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000350s ]
  13. SELECT * FROM `article` WHERE `id` < 521438 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000480s ]
  14. SELECT * FROM `article` WHERE `id` < 521438 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000612s ]
  15. SELECT * FROM `article` WHERE `id` < 521438 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000731s ]
0.097859s