如何在TypeScript中表达日期?日期不是TypeScript类型,所以我使用any或object?似乎会有一种"正确"的方式:
let myDate: any = new Date();
Run Code Online (Sandbox Code Playgroud)
尽管这是一个如此简单的问题,我在谷歌上找不到多少.
在 VSCode 中,TypeScript 显示了我定义的类型的非常有用的扩展。但是 TS 在 IntelliSense 中显示的内容是有限的。如果一个类型太长,那么我会看到这样的输出:
注意接近尾声的“11 more”。有时,为了对困难的类型定义进行故障排除,查看“N more”部分中的内容确实很有帮助。
有没有办法获得(用于开发期间的故障排除目的)完全扩展的类型定义,而没有那些“N more”消息来隐藏里面的内容?
https://github.com/Microsoft/vscode/issues/6638暗示截至 2017 年 2 月,此功能可能尚未可用(也未计划),但我不确定我是否正确阅读了该问题,无论情况如何在此期间发生了变化。
我正在寻找一种拥有嵌套对象的所有键/值对的方法。
(用于 MongoDB 点符号键/值类型的自动完成)
interface IPerson {
name: string;
age: number;
contact: {
address: string;
visitDate: Date;
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我想要实现的目标,使其成为:
type TPerson = {
name: string;
age: number;
contact: { address: string; visitDate: Date; }
"contact.address": string;
"contact.visitDate": Date;
}
Run Code Online (Sandbox Code Playgroud)
在这个答案中,我可以得到密钥Leaves<IPerson>。于是就变成了'name' | 'age' | 'contact.address' | 'contact.visitDate'。
在 @jcalz 的另一个答案中,我可以通过DeepIndex<IPerson, ...>.
是否有可能将它们组合在一起,成为类似的类型TPerson?
当我开始这个问题时,我在想它可以像这样简单[K in keyof T]: T[K];,只需进行一些巧妙的转换。但是我错了。这是我需要的:
所以界面
interface IPerson { …Run Code Online (Sandbox Code Playgroud) javascript mongodb mongodb-query typescript typescript-generics
我正在寻找一种方法来查看 TypeScript 将声明的类型解析为的类型(即泛型)。我使用 VS Code,并且经常使用并集、交集或其他通用结果,鼠标悬停时会显示以下信息:
(property) Workspace: Pick<{
__typename?: "a" | undefined;
} & {
__typename?: "b" | undefined;
} & Pick<typeA, "id" | ... 4 more ... | "state"> & {
...;
}, "__typename" | ... 4 more ... | "state"> & Pick<...>
Run Code Online (Sandbox Code Playgroud)
我知道 VS Code 必须具有完整的类型信息,因为当我尝试错误地使用该类型时,我会收到类似的错误Property 'goo' does not exist on type '...'
我希望有一种方法可以通过某种console.log(someUtilityFunction(type))或某些 vscode 设置或扩展来做到这一点?
typescript visual-studio-code typescript-generics typescript-typings
我想知道是否有可能给一个具有导出类型的文件,这些类型是否可以从泛型中提取到计算类型?
function example() {
return {
foo: 'hi',
bar: true,
baz: 1
};
}
export type Signature = ReturnType<typeof example>;
Run Code Online (Sandbox Code Playgroud)
对此:
export type Signature = {
foo: string;
bar: boolean;
baz: number;
}
Run Code Online (Sandbox Code Playgroud)
我不相信tsccli会这样做,我不确定这个过程会被称为什么。
可以tsc创建这个导出吗?
有没有第三方工具可以做到这一点?
我知道如何做到这一点的唯一方法是将鼠标悬停在 VSCode 中的变量上并复制计算类型,并且只有在它很短并且不会减弱时才有效......
我发现了其他一些对类似请求的引用:
使用VSCodewith时,TypeScript我发现自己经常将鼠标悬停在函数或对象上以检查它们的类型。
通常,这些对象的类型和接口依赖于多个其他接口和类型。所以悬停不会提供太多信息。
要检查类型,我必须手动进入例如节点模块以查找类型声明并在那里检查它。
有没有办法轻松检查嵌套类型VSCode?
下面是一个例子:
我想要一种简单的方法来检查React.FunctionComponent.
我正在尝试编写通用“groupBy”函数的打字稿签名,该函数会将可区分的类型联合数组“传播”到记录中,其中记录的每个字段都是可能的鉴别器值,并指向具体的对象数组来自工会的类型。
例子:
interface Dog {
type: 'dog'
dogMetadata: {}
}
interface Cat {
type: 'cat'
catMetadata: {}
}
type Animal = Dog | Cat
const animals: Animal[] = [{ type: 'dog', dogMetadata: {} }, { type: 'cat', catMetadata: {} }]
Run Code Online (Sandbox Code Playgroud)
每个接口都有一个公共鉴别器属性,没有其他公共属性。
这是简单的“groupBy”签名,它不会传播类型联合值,迫使我向下转换记录的值:
function groupBy<T, K extends string>(arr: T[], keyExtractor: (element: T) => K): Record<K, T[]>
const animalsByType: Record<'dog' | 'cat', Animal[]> = groupBy(animals, it => it.type)
const dogs: Dog[] = animalsByType['dog'] as Dog[] // Must downcast Animal[] to Dog[]
Run Code Online (Sandbox Code Playgroud)
如何制作一个“groupBy”来了解可区分联合类型的具体类型?我想要这样的东西: …
我只需要选择两个名称尚未从类型中定义的属性,然后从那里创建一个新类型,其中一个属性是必需的,另一个属性是可选的。
我知道可以选择一个单一的房产
<T extends Record<string,any>> {
[K in keyof T]: (Record<K, T[K]> &
Partial<Record<Exclude<keyof T, K>, never>>) extends infer U ? { [P in keyof U]: U[P] } : never
}[keyof T]
Run Code Online (Sandbox Code Playgroud)
但没有弄清楚如何(以及是否)可以使用此方法选择两个属性。
下面是我想如何使用它的示例
class Article {
name: string
id: number
content?: string
}
const article: TwoKeys<Article> = { id: 23 } // no error
const article: TwoKeys<Article> = { name: "my article", id: 122 } // no error
const article: TwoKeys<Article> = { name: "my article" , id: 23, …Run Code Online (Sandbox Code Playgroud) 假设你有一个对象类型:
type Person = {
name?: string;
color?: string;
address?: string;
}
Run Code Online (Sandbox Code Playgroud)
但是,您想将该类型更改为以下类型,您知道名称和颜色将存在。
type Person = {
name: string;
color: string;
address?: string;
}
Run Code Online (Sandbox Code Playgroud)
因此,有这样的函数
const throwIfUndefined = (
object: {[key: string]: any},
requiredKeys: string[]
): ReturnTypeHere => {
for (const key of requiredKeys) {
if (!object[key]) throw new Error("missing required key");
}
return object;
};
Run Code Online (Sandbox Code Playgroud)
输入函数参数以及返回类型 ( ReturnTypeHere) 的正确方法是什么?如果写得正确,下面的代码将 1) 抛出错误 2) 控制台记录名称。它永远不会控制台日志未定义。
const person = {...}
const requiredKeys = ["name", "color"];
const verifiedPerson = throwIfUndefined(person, requiredKeys);
console.log(verifiedPerson.name)
Run Code Online (Sandbox Code Playgroud)