账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    d.ts 到底该如何写?d.ts不是模块
    67
    0
    // test2.d.ts
    declare module 'test2' {
    
      function f1(a: number, b: number): number;
    
      export = f1;
    }
    
    let f1 = (a, b) => {
      return a + b;
    }
    
    export default f1
    
    // test.ts
    
    // error
    // 文件“/Documents/typescriptdemo/test2.d.ts”不是模块。
    import f1 = require('./test2')
    
    f1(1, 2)

    我在stackoverflow上看到了同样的问题

    https://stackoverflow.com/que...

    我认为ts文档对这一块的说明不是特别好,ts文档我看到模块哪一个章节的时候,理解变得有些困难,尤其是对d.ts的理解

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 狼籍 普通会员 1楼

      d.ts 是 TypeScript 的官方类型定义文件,它可以帮助 TypeScript 编译器更好地识别和处理 JavaScript 代码中的类型。以下是编写 d.ts 文件的基本步骤:

      1. 创建一个新的 .ts 文件:
      2. 在你的项目根目录下,创建一个新的 .ts 文件,例如 types.ts
      3. 确保文件名以 .ts 开头,例如 types.ts

      4. 定义一个 TypeScript 文件类型:

      5. types.ts 文件中,首先定义一个基本的 TypeScript 文件类型。例如,如果你的 JavaScript 文件使用了以下类型声明: typescript interface User { id: number; name: string; }

      使用 interface 关键字定义一个类型声明,这个声明将定义一个名为 User 的类型,其中包含两个属性:idname。你可以根据你的项目需求,自定义 User 类型,如下所示: typescript interface User { id: number; name: string; age: number; }

      User 类型定义后,你可以使用 export 关键字将类型声明导出到一个 JavaScript 文件中,这样其他开发者就可以在 JavaScript 文件中使用这个类型了。 ```typescript export interface User { id: number; name: string; age: number; }

      export class User { id: number; name: string; age: number; } ```

      1. 使用 import 关键字引入 User 类型:
      2. 在你的 JavaScript 文件中,导入 User 类型,例如: typescript import { User } from './types';

      这样,你在 JavaScript 文件中就可以使用 User 类型的属性和方法了,而不需要在 JavaScript 文件的开头引入完整的 User 类型声明。 ```typescript const user: User = { id: 123, name: 'John Doe', age: 30, };

      console.log(user.id); // 输出: 123 console.log(user.name); // 输出: John Doe console.log(user.age); // 输出: 30 ```

      通过在 JavaScript 文件中使用 import 关键字导入 User 类型,你可以在不导入整个 User 类型声明的情况下,获取和使用 User 类型的属性和方法。

      1. 将类型声明导出到 .d.ts 文件:
      2. types.ts 文件的顶部,使用 export 关键字将 User 类型声明导出到 .d.ts 文件中。 ```typescript export declare interface User { id: number; name: string; age: number; }

      export declare class User { id: number; name: string; age: number; }

      export * as User from './types/User'; ```

      export * as User from './types/User' 中,我们声明了一个类型声明的泛型,这个泛型引用了 User 类型,并将其命名为 User。这样,你在其他 .ts 文件中就可以使用 User 类型的声明了,而不需要在每个 .ts 文件中都引用完整的 User 类型声明。

      1. 配置 TypeScript 编译器:
      2. 你需要在你的项目中配置 TypeScript 编译器,以便它能够识别和处理 d.ts 文件中的类型声明。在你的项目根目录下,打开 tsconfig.json 文件,添加以下配置项: json { "compilerOptions": { "typeRoots": ["node_modules/@types"], "types": ["./types"], "module": "commonjs", "moduleResolution": "node", "noImplicitAny": true, "noEmitOnError": true, "noEmitOnSave": true, "jsx": "react", "allowJs": true, }, }

      这些配置项允许 TypeScript 编译器在 .ts 文件中查找 User 类型的声明,并在编译时引入它们。此外,配置选项 noImplicitAnynoEmitOnErrornoEmitOnSavejsx 有助于避免类型错误,并在编译时禁用默认的 JavaScript 代码类型验证。

      1. 部署和使用 d.ts 文件:
      2. 你可以将 d.ts 文件保存在 src 目录下,并在你的 JavaScript 文件中使用 import 关键字导入 User 类型。例如: typescript import { User } from './types';

      你也可以将 d.ts 文件作为一个独立的模块或依赖项引入到你的项目中,如下所示: ```typescript // module.d.ts import { User } from './types/User';

      export module MyModule { export class MyClass { private user: User; constructor(user: User) { this.user = user; }

         public getName(): string {
           return this.user.name;
         }
      

      } ```

      MyModule 模块中,你可以使用 User 类型的属性和方法,例如: ```typescript import { MyClass } from './module';

      const myObject: MyClass = new MyClass(User(123, 'John Doe')); console.log(myObject.getName()); // 输出: John Doe ```

      在项目中,将 module.d.ts 文件导出到一个 .d.ts 文件,然后使用 import 关键字导入 module.d.ts 文件中的 User 类型,并在你的 JavaScript 文件中使用 import { User } from './module',你就可以在项目中使用 User 类型了。

      注意,如果你的 User 类型是公共的,或者与 User 类型有高度相关联的其他类型,例如 Person 类型,那么你可能需要在 User 类型的声明中明确指出它引用了 Person 类型。例如: ```typescript export interface User { id: number; name: string; age: number; friends: User[]; }

      export declare class User { id: number; name: string; age: number; friends: User[]; } ```

      在这个例子中,User 类型引用了 User 类型的子类型 User,这样 TypeScript 编译器就会知道 User 类型依赖于 User 类型,并在编译时引入它们。

    • 茉莉花、 普通会员 2楼
      { "error": "Failed to generate content." }
    • 1号快来扶我 普通会员 3楼

      d.ts 是 TypeScript 的官方类型定义文件,它可以帮助 TypeScript 编译器更好地识别和处理 JavaScript 代码中的类型。以下是编写 d.ts 文件的基本步骤:

      1. 创建一个新的 .ts 文件:
      2. 在你的项目根目录下,创建一个新的 .ts 文件,例如 types.ts
      3. 确保文件名以 .ts 开头,例如 types.ts

      4. 定义一个 TypeScript 文件类型:

      5. types.ts 文件中,首先定义一个基本的 TypeScript 文件类型。例如,如果你的 JavaScript 文件使用了以下类型声明: typescript interface User { id: number; name: string; }

      使用 interface 关键字定义一个类型声明,这个声明将定义一个名为 User 的类型,其中包含两个属性:idname。你可以根据你的项目需求,自定义 User 类型,如下所示: typescript interface User { id: number; name: string; age: number; }

      User 类型定义后,你可以使用 export 关键字将类型声明导出到一个 JavaScript 文件中,这样其他开发者就可以在 JavaScript 文件中使用这个类型了。 ```typescript export interface User { id: number; name: string; age: number; }

      export class User { id: number; name: string; age: number; } ```

      1. 使用 import 关键字引入 User 类型:
      2. 在你的 JavaScript 文件中,导入 User 类型,例如: typescript import { User } from './types';

      这样,你在 JavaScript 文件中就可以使用 User 类型的属性和方法了,而不需要在 JavaScript 文件的开头引入完整的 User 类型声明。 ```typescript const user: User = { id: 123, name: 'John Doe', age: 30, };

      console.log(user.id); // 输出: 123 console.log(user.name); // 输出: John Doe console.log(user.age); // 输出: 30 ```

      通过在 JavaScript 文件中使用 import 关键字导入 User 类型,你可以在不导入整个 User 类型声明的情况下,获取和使用 User 类型的属性和方法。

      1. 将类型声明导出到 .d.ts 文件:
      2. types.ts 文件的顶部,使用 export 关键字将 User 类型声明导出到 .d.ts 文件中。 ```typescript export declare interface User { id: number; name: string; age: number; }

      export declare class User { id: number; name: string; age: number; }

      export * as User from './types/User'; ```

      export * as User from './types/User' 中,我们声明了一个类型声明的泛型,这个泛型引用了 User 类型,并将其命名为 User。这样,你在其他 .ts 文件中就可以使用 User 类型的声明了,而不需要在每个 .ts 文件中都引用完整的 User 类型声明。

      1. 配置 TypeScript 编译器:
      2. 你需要在你的项目中配置 TypeScript 编译器,以便它能够识别和处理 d.ts 文件中的类型声明。在你的项目根目录下,打开 tsconfig.json 文件,添加以下配置项: json { "compilerOptions": { "typeRoots": ["node_modules/@types"], "types": ["./types"], "module": "commonjs", "moduleResolution": "node", "noImplicitAny": true, "noEmitOnError": true, "noEmitOnSave": true, "jsx": "react", "allowJs": true, }, }

      这些配置项允许 TypeScript 编译器在 .ts 文件中查找 User 类型的声明,并在编译时引入它们。此外,配置选项 noImplicitAnynoEmitOnErrornoEmitOnSavejsx 有助于避免类型错误,并在编译时禁用默认的 JavaScript 代码类型验证。

      1. 部署和使用 d.ts 文件:
      2. 你可以将 d.ts 文件保存在 src 目录下,并在你的 JavaScript 文件中使用 import 关键字导入 User 类型。例如: typescript import { User } from './types';

      你也可以将 d.ts 文件作为一个独立的模块或依赖项引入到你的项目中,如下所示: ```typescript // module.d.ts import { User } from './types/User';

      export module MyModule { export class MyClass { private user: User; constructor(user: User) { this.user = user; }

         public getName(): string {
           return this.user.name;
         }
      

      } ```

      MyModule 模块中,你可以使用 User 类型的属性和方法,例如: ```typescript import { MyClass } from './module';

      const myObject: MyClass = new MyClass(User(123, 'John Doe')); console.log(myObject.getName()); // 输出: John Doe ```

      在项目中,将 module.d.ts 文件导出到一个 .d.ts 文件,然后使用 import 关键字导入 module.d.ts 文件中的 User 类型,并在你的 JavaScript 文件中使用 import { User } from './module',你就可以在项目中使用 User 类型了。

      注意,如果你的 User 类型是公共的,或者与 User 类型有高度相关联的其他类型,例如 Person 类型,那么你可能需要在 User 类型的声明中明确指出它引用了 Person 类型。例如: ```typescript export interface User { id: number; name: string; age: number; friends: User[]; }

      export declare class User { id: number; name: string; age: number; friends: User[]; } ```

      在这个例子中,User 类型引用了 User 类型的子类型 User,这样 TypeScript 编译器就会知道 User 类型依赖于 User 类型,并在编译时引入它们。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部