Syl*_*ler 8 typescript typescript-typings
如何从文件中导入所有类型而不更改它(如test.ts下面的文件),并通过括号语法访问它们?
测试.ts
export type TEST1 = 'test1'
export type TEST2 = 'test2'
export type TEST3 = 'test3'
export type TEST4 = 'test4'
Run Code Online (Sandbox Code Playgroud)
索引.ts
import type * as T from './test'
const a: T.TEST1 = 'test1' // what i can do
type B = 'TEST2' | 'TEST3' // subset of available types in test.ts
const b: T[B] = 'test2' // what i want to do
Run Code Online (Sandbox Code Playgroud)
乍一看文档,这似乎是不可能的,但我想我已经弄清楚了。对于您在示例中显示的特定场景,其中类型是字符串文字,您可以使用可索引类型和映射类型的组合,如下所示:
test.ts
type TYPES = 'test1' | 'test2' | 'test3' | 'test4';
type MAPPED = {
[key in TYPES]: TYPES;
}
type TYPE = {
TEST1: 'test1',
TEST2: 'test2',
TEST3: 'test3',
TEST4: 'test4'
}
type T = MAPPED & TYPE;
export default T;
Run Code Online (Sandbox Code Playgroud)
index.ts
import type T from './test';
type b = 'TEST2' | 'TEST3';
const b: T[b] = 'test1';
Run Code Online (Sandbox Code Playgroud)
第二行将显示错误:
类型“test1”不可分配给类型“test2”| “测试3”'。您的意思是“test2”吗?
这证明这是按预期工作的。
| 归档时间: |
|
| 查看次数: |
499 次 |
| 最近记录: |