- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于应用程序代码,是否建议将 Redux 存储类型放在 state-slice.d.ts
中?文件?
我继承了一个代码库,其中所有核心类型都放在 .d.ts
中。定义文件,但这与我对定义文件的作用的理解相反。
我的理解是,定义文件适用于编写库时(这是作者集中一个接口(interface)以定义我们向消费者公开的库的 API 的方便位置),但不适合应用程序代码,因为数据可以快速变化。
也就是说,我无法提出反对 .d.ts
的好论据。文件本身 - 从功能的角度来看,我没有看到引用类型的区别
declare namespace Domain {
interface State {
// ...
}
}
从定义文件,或从具有
export interface ReduxState {}
要添加更多上下文,因为这是一个有点奇怪的问题 - 我目前正在开发一个新项目,该项目需要从我继承的现有代码库中共享这些核心类型,我正在尝试将这些类型移动到单独的包。
export
s)
/* package A */
export declare namespace StateA { }
/* package B */
import { StateA } from 'packageA/StateA'
const stateA: StateA = {};
而不是 TypeScript 自动拾取它。
/* package B (originally) */
// stateA.d.ts
declare namespace StateA {}
// test.ts
const stateA: StateA = {};
我试过改变
typeRoots
tsconfig.json
中的字段文件以查看是否可以避免插入
import
处处说法,无济于事。
.ts
文件? 最佳答案
你看到这个答案了吗How do I use namespaces with TypeScript external modules?
我不完全同意它,但我认为值得一看。我最近也问了我所有这些问题。e
这是我一直在做的事情:
对于仅在一个文件或几个文件中使用的类型,我从常规 ts
定义和导出它们文件。
例如:
store.ts
该文件定义了一个 APP_THUNK
仅由处理 redux thunk 创建的少数文件使用的类型。所以,我正在定义和导出这个文件,因为它使用 ROOT_STATE
此处也定义的类型。
import { configureStore } from "@reduxjs/toolkit";
import { rootReducer } from "./rootReducer";
import { Action } from "@reduxjs/toolkit";
import { ThunkAction } from "redux-thunk";
export interface ROOT_STATE {
...
}
export type APP_THUNK = ThunkAction<
Promise<void> | void,
ROOT_STATE,
unknown,
Action<string>
>
export const store = configureStore({
reducer: rootReducer
});
然后,当我需要使用这些类型时,我会导入它们:
import { APP_THUNK } from "@redux/store";
但我也有一些类型在我的整个项目中使用,在很多文件中。对于那些类型,我保留
d.ts
文件并使用
declare namespace SOME_NAMESPACE
使其可访问.
blogPost
相关的所有类型。对象。
declare namespace PROJECT {
interface BLOGPOST {
id: string,
slug: string,
images: BLOGPOST_IMAGE[]
}
interface BLOGPOST_IMAGE {
id: string,
src: string,
alt: string,
caption: string,
}
// AND SO ON...
// THERE ARE MANY MORE TYPES HERE RELATED TO BLOGPOSTS
}
我也合并了
PROJECT
来自不同文件的命名空间。例如:
PRODUCTS.d.ts
还声明
namespace PROJECT
它会自动与
BLOGPOSTS.d.ts
上的那个合并.
interface Props {
blogPost: PROJECT.BLOGPOST
}
// OR MAYBE
const blogPost = await API.getBlogPost() as PROJECT.BLOGPOST;
并且自动完成立即在该命名空间下分组。我认为这也很好。
Using Modules
Modules can contain both code and declarations.
Modules also have a dependency on a module loader (such as CommonJs/Require.js) or a runtime which supports ES Modules. Modules provide for better code reuse, stronger isolation and better tooling support for bundling.
It is also worth noting that, for Node.js applications, modules are the default and we recommended modules over namespaces in modern code.
Starting with ECMAScript 2015, modules are native part of the language, and should be supported by all compliant engine implementations. Thus, for new projects modules would be the recommended code organization mechanism.
关于typescript - 在类型定义文件中定义类型与在普通类型文件中定义类型的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64148976/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
DBMS 供应商使用 SQL 方言特性来区分他们的产品,同时声称支持 SQL 标准。 'Nuff 说。 您编写的任何 SQL 示例是否无法转换为 SQL:2008 标准 SQL? 具体来说,我说的是
多年来,我一直在考虑这个问题,但从未成功实现过。我说的是一个快速、高效的 C 函数,它在输入中接受一个整数值(例如 16 位),并在输出中给出完全不同的相同位大小的数字,但“考虑到”所有数字已经给出了
当标准 iPhone UI 控件变得过于平淡,并且您希望简单的记分应用程序通过颜色、动画、非标准 GUI 字体和背景壁纸等流行时。 ,为这样的事情集成游戏引擎有意义吗? 我对 Unity3D 和 To
这是我的第一个问题,所以如果我没有正确地标记标签,我很抱歉。我尝试过...这是我的问题:我希望有人能告诉我如何为普通的表格 View 创建 2 行节标题。我遇到的问题是:1)我找不到可以模仿默认 1
所以我一直在开发一个仅使用普通 JavaScript 的“非常简单”的计算器。但我不知道为什么它现在起作用了。 这是我的 JavaScript 和 HTML 代码: (function() { "
我正在尝试编写一个函数来满足以下要求: 给定一个对象和一个键,“getElementsThatEqual10AtProperty”返回一个数组,其中包含位于给定键处等于 10 的数组的所有元素。 注释
[最终编辑:我觉得有必要做出回应,因为我从这篇文章中学到了很多东西(主要是通过你们,我花了更多的时间来理解CSS..但最后,我真的不知道如何为了使这项工作有效..除了真正破坏html的基本结构..我不
我希望能够将一个函数附加到一个元素上,该函数只有在该元素上单击指定时间后才会运行。 有几个( 1 、 2 、 3 )与在 javascript 中处理鼠标保持相关的问题;但这些问题要么使用 jQuer
我想将泛型函数保存为变量: (defvar *gf* (make-instance 'standard-generic-function) 但是在添加方法时,我必须自己定义call-next-meth
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
我有一个普通的 tableView——一个部分——当我滚动时,行出现在标题后面。像这样: 有没有简单的方法来防止这种情况?我认为它与 contentInset 有关,但这也会移动标题,这不是我想要的。
你好,我有一个ajax表单,它返回一个控制“发送”动画的脚本。然而,当淡入开始时,它会停止在 0.1 不透明度。我不确定脚本中有什么问题。任何帮助将不胜感激。 quote_form = documen
这是演示我的问题的代码笔:http://codepen.io/PiotrBerebecki/pen/yaWQwZ 目标是当用户点击时有滚动动画 顶部导航链接,以及 Back to Top 按钮在右下角
在我重新发明轮子之前,纯Java中有类似主题的并发队列吗?我有以下要求: 多个读者/消费者 多名作家/制片人 每条消息都必须由每个(活跃的)消费者消费 在每个消费者阅读一条消息后,它应该变成垃圾(即不
这个问题与 Do MySQL tables need an ID? 有一个无意义的auto_incremental ID作为一个表的PRIMARY KEY,那么我创建其他KEY时,我是否应该在KEY中
我有一个普通 UITableView 并且我想隐藏分隔符。为了隐藏它,我尝试使用以下属性: 我也在 viewDidLoad 中设置了它。 self.tableView.separatorStyle =
var vettore = document.getElementById(id_form).elements; for (var i = 0; i '+vettore_nomi_file[i]; 最
我已经构建了一个非常简单的轮播,但有一个问题。在我的轮播中,我有三张幻灯片,一个上一个按钮和一个下一个按钮。我想要的是当我单击下一个按钮并在最后一张幻灯片上转到第一张幻灯片时。此外,当我单击上一个按钮
我是 javascript 的新手,所以我需要一些帮助。 我正在尝试制作一个简单的插件(当然只是为了学习,以便更好地理解事物),但我遇到了一些麻烦,我将不胜感激。 我的插件是基本的,我正在尝试为 sc
我是一名优秀的程序员,十分优秀!