1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wolfx-TypeScript-Handbook-zh

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
typescript-2.9.md 2 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
zhongsp Отправлено 12.02.2021 12:20 0165a94

TypeScript 2.9

keyof 现在包括 stringnumbersymbol 键名

TypeScript 2.9 将索引类型泛化为包括 numbersymbol 命名属性。以前,keyof 运算符和映射类型仅支持 string 命名属性。

function useKey<T, K extends keyof T>(o: T, k: K) {
  var name: string = k;  // 错误: keyof T 不能分配给 `string`
}

建议

  • 如果你的函数只能处理名字符串属性的键,请在声明中使用 Extract<keyof T,string>

    function useKey<T, K extends Extract<keyof T, string>>(o: T, k: K) {
      var name: string = k;  // OK
    }
  • 如果你的函数可以处理所有属性键,那么更改应该是顺畅的:

    function useKey<T, K extends keyof T>(o: T, k: K) {
      var name: string | number | symbol = k;
    }
  • 除此之外,还可以使用 --keyofStringsOnly 编译器选项禁用新行为。

剩余参数后面不允许尾后逗号

以下代码是一个自 #22262 开始的编译器错误:

function f(
  a: number,
  ...b: number[], // 违规的尾随逗号
) {}

剩余参数上的尾随逗号不是有效的 JavaScript,并且,这个语法现在在 TypeScript 中也是一个错误。

strictNullChecks 中,无类型约束参数不再分配给 object

以下代码是自24013起在 strickNullChecks 下出现的编译器错误:

function f<T>(x: T) {
  const y: object | null | undefined = x;
}

它可以用任意类型(例如,stringnumber )来实现,因此允许它是不正确的。 如果您遇到此问题,请将您的类型参数约束为 object 以仅允许对象类型。如果想允许任何类型,使用 {} 进行比较而不是 object

参考

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/wolfx-TypeScript-Handbook-zh.git
git@api.gitlife.ru:oschina-mirror/wolfx-TypeScript-Handbook-zh.git
oschina-mirror
wolfx-TypeScript-Handbook-zh
wolfx-TypeScript-Handbook-zh
dev