Uninote
Uninote
用户根目录
brdr
common
programming
docs
tests
后端试题
问题讨论

sum

90dcc55 整体迁移

npm run

demo

E:\codex\ts-test

as <> 泛型,null 区别

const btn = document.querySelector<HTMLButtonElement>('#btn3')!;
const btn2 = document.querySelector('#btn2') as HTMLButtonElement;
区别?
  • codex://threads/01a14f8c-a76f-7602-89fb-9ef51997b753
  • 复杂参考:E:\uninote\mynote-client\src\main\window-session.ts
    • 简化demo E:\codex\ts-test\src\deduction.ts

node 直接支持 ts吗?

https://chat.deepseek.com/a/chat/s/09e9d7ec-d8f7-4ada-a261-8645b5ce6bde

Node.js 并非内置了完整的 TypeScript 编译器,而是采用了类型剥离 (Type Stripping) 机制。它只是在运行时将代码中的 TypeScript 类型注解(如 : string、interface 等)替换为空白,然后当作普通 JavaScript 执行。这个过程不进行任何类型检查,因此速度很快,也不需要生成 source map

vscode 还报错

解释原理: "references": [
 { "path": "./tsconfig.node.json" },
 { "path": "./tsconfig.renderer.json" },
 { "path": "./tsconfig.scripts.json" },
 { "path": "./tsconfig.wsh.json" }
 ]

声明合并

interface SyncManager extends SyncManagerLibraryMethods {}
class SyncManager {...

// Preserve method descriptors on the existing public prototype.
for (const name of Object.getOwnPropertyNames(SyncManagerLibraryMethods.prototype)) {

  • codex://threads/01a12a1b-d998-7a52-ab11-86f26bf8a01a
  • 需注意:类型声明本身不能保证运行时方法已经挂载。

unknown Record

let src: unknown;
let dest = src as Record<string, unknown>;
console.log(src.a, dest.a);

this 类型注解

https://chat.deepseek.com/a/chat/s/76fbe666-1052-4979-a24f-58f8f7aebd05

async pushQueue(this: SyncClient, { safe = false } = {}) {

部分编译

  • codex://threads/01a135b5-0c38-7ed1-b70e-132ef94e35e6

主进程 ts source map

  • codex://threads/01a13969-5495-75c1-9fbe-41c8c9f714f1
// 主进程引导:在加载应用模块前启用现有 Source Map 的堆栈映射。

import { setSourceMapsSupport } from 'node:module';

setSourceMapsSupport(true);
require('./main');

排查开发服务器启动耗时

  • codex://threads/01a13424-0815-74b1-a17c-edb35d0bec96 最小方案:
  • 启动时检查源码指纹、配置、依赖和必要产物。
  • 全部未变:完全不启动 TypeScript 编译器。
  • 主进程或 preload 有变化:只调用受影响目标的增量编译,由 TypeScript 判断需要检查、输出哪些文件。
  • Renderer 变化:继续使用现有 Vite 链路。
  • 完整类型检查保留在 npm run typecheck。

TS类属性未初始化报错

class SyncClient {
  store: SyncStateStore;
}
这个构造函数中没有初始化,如何避免ts报错?

class SyncClient {
  store!: SyncStateStore;
}

参数类型谓词

https://chat.deepseek.com/a/chat/s/be39169b-e61b-4a86-841b-3c0db45a7f8f

{
  let filterPredicate = (root: string | null): root is string => {
    return Boolean(root);
  };

  let src = ['a', null, 'ab', null, 'cde'];
  let roots = src.filter(filterPredicate);
  test(roots);

  // 这个就会 ts 报错
  // let roots2 = src.filter((root) => Boolean(root));
  // test(roots2);

  // 用于类型守卫
  function test2(param: string | null) {
    if (filterPredicate(param)) {
      console.log('var1 is string: ', param.length);
    } else {
      console.log('var1 is null');
    }
  }

  function test(roots: string[]) {
    console.log('roots: ', roots);
    for (const root of roots) {
      console.log('root len: ', root.length);
    }
  }
}

不要用这个

export type WorkspaceHost = {
 [K in
 | 'open'
 | 'publicState']: OmitThisParameter<WorkspaceManager[K]>;
} & {
 runOperation?: WorkspaceManager['runOperation'];
};
这里为什么不直接使用 WorkspaceManager?
  • codex://threads/01a15286-5241-70b3-916c-ffb0176846b0
  • 但这样会造成实际调用了确查询不到引用,如 quickOpenSearch

recent-todo

ts-sum

点赞(0) 阅读(22) 举报
目录
标题