Typescript 导出和再导出接口(interface)及其他数据

标签 typescript import export

我是 typescript 的新手。如何从特定文件中导出类型定义(类、接口(interface))+所有变量?我试过这个:

模型.ts

export interface CounterState {
    count: number;
}

let t = 5;
export {t}; 

索引.ts

import * as models from './models';
models.t -> ok
models.CounterState -> not visible, why?
export default  { models };

reducer.ts

import CounterStore from "./index";


CounterStore.models.t -> ok
CounterStore.models.CounterState -> not visible, why?

为什么 * 不导入所有内容? 如果我这样做:import {CounterState} from "./models";它会起作用。

编辑:如果我将接口(interface)更改为类,它会按预期工作。

最佳答案

问题不在于导入/导出,而在于您正在尝试评估接口(interface),这是不可能的:

  • 实际的接口(interface)声明不会编译成任何 javascript,因此尝试调用 models.CounterState 在已编译的 js 中没有任何意义。

  • 但是,如果您声明了一个类,您就会得到一个编译结果。这解释了为什么这不会引发错误。

我只想对 typescript 错误的极端模糊性再次大声疾呼。 😐

两者的区别,看equivalent playground example以及它编译成什么:

interface ICounter { // No compilation result
  count: number 
}

class Counter { // has actual compilation result
  count: number
}

let interfaceImplemenetation: ICounter // Compiles fine
Counter // Compiles fine
ICounter // Compiles to undefined

关于Typescript 导出和再导出接口(interface)及其他数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39033915/

相关文章:

typescript - JSDoc 相当于 Typescript 的 `as const` 吗?

r - 进口和依赖

android - 困惑 : How does SQLiteOpenHelper onUpgrade() behave? 并与旧数据库备份一起导入?

mysql - 如何从 Cloud9 导出 MySQL 数据库?

TypeScript/JavaScript forEach 调用

javascript - typescript 方法覆盖不起作用

css - 在 index.html 中导入 css 和在 Angular 5 中导入 styleUrls 之间的区别

r - 将包含德语变音符号的 CSV 文件导入 R

c# - 如何导入网络程序集

database - 将数据导出为 C#/VB 格式,以便在 EF Code First 的数据库初始化中使用它们