代码之家  ›  专栏  ›  技术社区  ›  Tim Diekmann suresh madaparthi

动态导入的返回类型是什么?

  •  -1
  • Tim Diekmann suresh madaparthi  · 技术社区  · 6 年前

    我有个文件 必须 Promise :

    export function load() {
        // ...
        return import(filename);
    }
    

    这个函数的返回类型是什么? Promise<any> 工作,但感觉很奇怪。我想把这个签名写为。

    export function load() -> Promise<???>;
    
    1 回复  |  直到 6 年前
        1
  •  10
  •   Remo H. Jansen    6 年前

    您需要使用导入类型和TypeScript 2.9

    我的_模块.ts

    export const user = { name: "John", age: 30 };
    export const event = { name: "Birthday", date: new Date(1989, 13, 2) };
    

    演示.ts

    type ModuleType = typeof import("./my_module"); // This is the import type!
    
    export function load(): Promise<ModuleType> {
        // ...
        return import("./my_module");
    }
    
    (async () => {
        const module = await load();
        console.log(module.user.age); // It works!
    })();
    

    tsconfig.json文件(增加供参考)

    {
      "compilerOptions": {
        "target": "es5",
        "module": "commonjs",
        "lib": [
          "es2015",
          "dom"
        ], 
        "strict": true,  
        "esModuleInterop": true
      }
    }
    
        2
  •  1
  •   Ian Campbell    5 年前

    type DynamicImportType = () => Promise<{ default: React.ComponentType<any>; }>;
    type LazyComponentType = React.LazyExoticComponent<React.ComponentType<any>>;
    
    const dynamicImport: DynamicImportType = () => import('./MyComponent');
    const LazyComponent: LazyComponentType = React.lazy(dynamicImport);
    

    资源

        3
  •  1
  •   unadlib    4 年前

    counter.ts :

    export class Counter {}
    
    export const list = ['test'];
    

    index.ts

    type ImportClass<T, K extends keyof T> = T extends Record<K, infer S>
      ? S extends new (...args: any[]) => infer R
        ? R
        : never
      : never;
    
    type ImportType<T, K extends keyof T> = T extends Record<K, infer R>
      ? R
      : never;
    
    type Counter = ImportClass<typeof import('./counter'), 'Counter'>;
    
    type List = ImportType<typeof import('./counter'), 'list'>;
    
    推荐文章