我试图在Typescript中更深入地理解高级类型,其中一种类型是NonFunctionPropertyNames,它只提取给定对象的一个属性。 type NonFunctionPropertyNames<T> = { [K in keyof T]: T[K] extends Function ? never : K }[keyof T]; 我可以理解花括号'{ [K in keyof T]: T[K] extends Function ? never : K }'中的第一部分,我们声明了一个对象,并排除了扩展函数的属性。让我困惑的是花括号[keyof T]后面的
我这样定义一个AbstractModel:
export interface AbstractModel {
[key: string]: any
}
然后我将类型声明为Keys
export type Keys = keyof AbstractModel;
我希望任何具有Keys类型的内容都会被统一地解释为一个字符串,例如:
const test: Keys;
test.toLowercase(); // Error: Property 'toLowerCase' does not exist on type 'string | number'. Pro
我正在尝试创建一个函数,该函数可以访问一个位于另一个对象中的对象内部的键。
我一直在通读TS文档,但我认为我的函数没有使用正确的泛型,例如:
interface A {
abc: number
acd: number
}
interface B {
bcd: number
bde: number
}
interface C {
cde: number
cef: number
}
interface Data {
a: A
b: B
c: C
}
const data: Data = {
a: {
abc: 1,
acd: 2
},
很抱歉,我想输入一个mapBy
export function mapBy<T, K = keyof T>(array: T[], key: K): T[K][] {
return array.map((item: T) => item[key]);
}
TypeScript投诉:Type 'K' cannot be used to index type 'T'. ts(2536)
我的第二个案子更棘手:
export default function sumBy<T, K = keyof T>(array: T[], key:
在typescript中,我可以创建一个类型安全的对象键数组,如下所示:
export type Keys<T> = [keyof T][];
export const keys = <T>(o: T): Keys<T> => Object.keys(o) as any;
const k = keys(a);
但是如何为这些值创建一个类似的类型:
export type Values<T> = [T][keyof T];
// Type 'keyof T' cannot be used to index type
我刚开始使用Typescript,并且在类型方面有问题:我得到以下错误: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type...No index signature with a parameter of type 'string' was found on type 我有一个端点返回的数据,看起来是这样的: export type CategoryPosts = {
count:
我一直在研究并尝试将现有项目(从Node.js)转换为TypeScript。
对于上下文,我使用的是http-status包()
我试图将变量传递到它们的默认导出中,但是它得到了一个错误:
import status = require("http-status");
status.OK; // this works
status["OK"] // this also works
let str = "OK";
status[str]; // error
错误:
元素隐式具有'any‘类型,因为类型'string’的表达式不能
我正在尝试获取TypeScript枚举的所有项。为此,我使用以下泛型函数: static getAllValues<T>(enumeration: T): Array<T>{
let enumKeys: Array<T> = Object.keys(enumeration).map(k => enumeration[k]);
let items: Array<T> = new Array<T>();
for(let elem of enumKeys){
if (typeof(elem)
我有个东西
const person = {
first: 'John',
last: 'Doe',
id: 1,
}
我要从person对象中删除密钥。因此,在JavaScript中,它可以工作。
['first', 'last'].forEach((i) => {
delete person[i]
})
错误(来自未编译的编辑器VSCode )
Element implicitly has an 'any' type because expression of type 'stri
我已经编码TypeScript几年了。我已经看到了它的发展,并在每一个版本中都做了很多改进。然而,所有这些静态类型的完美都会随着类型的转换而分崩离析。
尽管在TypeScript中进行了大量的编码,但我仍然不明白如何避免在生成对象转换的函数中转换。
如下面的示例所示:我希望以一个对象作为输入,并将该对象的转换副本作为输出返回。
function stringifyProperties<T>(obj: T): { [P in keyof T]: string } {
let stringified: { [P in keyof T]: string } = {} as any
我有一个简单的代码:
const allTypes = { jpg: true, gif: true, png: true, mp4: true };
const mediaType = url.substring(url.lastIndexOf('.') + 1).toLowerCase();
return Boolean(allTypes[mediaType]);
TypeScript正在抱怨:
Element implicitly has an 'any' type because expression of type 'string' c
我目前正在从事一个web项目,该项目大量地利用了国际化(i18n),并且我很难弄清楚如何确保所有语言共享完全相同的密钥。
下面是一个src/lang/en.ts文件的简单示例:
export default {
title: "My Website Project",
description: "This is an example of a file which contains phrases and their keys",
hello: "Hello!",
};
下面是一个简单的src/lang/id.ts文件示例:
expo
我有一个函数selectProperties,用于从某些接口选择键值,并在升级到TypeScript4.4后得到错误error TS2322: Type 'keyof T' is not assignable to type 'T'.。typescript playground,谁有更好的主意让我四处走动? export interface QueryActioned {
event: string;
properties:string
}
export interface QueryStarted {
event: number
proper
我有一个非常简单的问题,我想在TypeScript中循环一个对象。
const an_object = {
one: 1,
two: 2,
three: 3
};
for (let key in an_object) {
let value = an_object[key];
// Do something with value
}
此行let value = an_object[key];导致TypeScript错误:
react脚本元素隐式具有“任意”类型,因为“string”类型的表达式不能用于索引类型“{一:数字;二:数字;三:数字;}”。
给一个盒子:
type A = {readonly id: 'A'}
type B = {readonly id: 'B'}
type Value = A | B
class Box<T extends Value | {[x: string]: Value}> {
constructor(public value: T) {}
}
我想创建一个函数merge
let a = {id: 'A'} as A
let b = {id: 'B'} as B
let merged = merge(
new Box(