内置类型的打字稿别名

时间:2020-02-15 08:43:04

标签: typescript

如何为utility-types之类的内置类型创建别名,我具有与内置类型同名的定义,并且碰巧使用与内置类型同名的类型,例如:

interface Record { // <-- my definition

   toObject() : Record<string, object> // <-- built in definition
}

不起作用

type TsRecord<K,V> = Record<K, V>

如果有导入方法,我找不到引用

import {Record as TsRecord} from ?

2 个答案:

答案 0 :(得分:2)

如果您使用的是TypeScript 3.4或更高版本,则可以使用globalThis namespace访问其名称已被本地声明遮盖的全局类型:

interface Record { // <-- my definition
  toObject(): globalThis.Record<string, object> // <-- built in definition
}

好的,希望能有所帮助;祝你好运!

Playground link to code

答案 1 :(得分:0)

不确定为什么必须使用名称Record作为自己的定义,但可以将源代码重用为自定义TsRecord类型的record实用工具类型:

type TsRecord<K extends keyof any, T> = {
  [P in K]: T;
};

interface Record {
  // <-- my definition
  toObject(): TsRecord<string, object>; 
}

或重命名您自己的定义:

interface TsRecord {
  // <-- my definition
  toObject(): Record<string, object>; 
}