我想学习使用条件类型试图推断签名中类型的类型的算法。
示例1:这里的正确地推断了T为number
type Args<T> = { value: T }
function foo<T>(args: Args<T>) { return args; }
// correctly inferred as foo<number>
foo({ value: 123 });
示例2:条件类型和推断unknown
type StringOrNever<T> = T extends string ? string : never;
type Ar
我试图提取一个通用的字符串文字类型,但是typescript推断只返回类型字符串。
所以从技术上讲,一旦字符串文字类型传递给函数,我们就不能再提取它了。
type Key<T extends string> = { key: T };
declare function getKey<T extends string>(key: T): Key<T>;
let someKey = getKey('check');
declare function updateWithKey<T, K extends string>(key:
我有这个typescript代码,使用的泛型过去在typescript 2.3下工作,但现在在typescript 2.4.1的更严格的类型强制下中断。
我写了这个最小的代码片段来演示这个问题:
class A {}
class B extends A {}
function helloA(clazz: typeof A) {}
helloA(B); // fine
class C<T> {
private c: T;
};
class D extends C<string> {}
function helloC(clazz: typeof C) {}
hel
你知道如何才能做到这一点吗?
function getTest<T>(): T["test"] {
// ...
}
...or动态:
function getTest<T, U>(): T[U] {
// ...
}
不幸的是,编译器说是Type '“test”' cannot be used to index type 'T'。我使用的是TypeScript 2.4.2。
我希望创建一个基于泛型类型的对象,但无法理解语法。我想要的是这样的例子:
myfunc<T>() : T[] {
let obj = new T();
let obj2 = new T();
return [obj, obj2];
}
当然,new T()不编译。在C#中,我会添加一个where T : new约束来使其工作。在TypeScript中,什么是等价的?
如何获得应用于TypeScript中参数的泛型函数的类型?
例如,我如何在下面定义Apply?
declare function f<T>(t: T): T extends number ? boolean : object;
type ResForNumArg = Apply<typeof f, number>; // should be boolean
type ResForStringArg = Apply<typeof f, object>; // should be object
如果无法做到这一点,您可以通过创建一个类型别名来解决特定情
在TypeScript中,基本类型推断非常简单:
const bar = foo(); // bar: <type that foo returns>
考虑到泛型参数的默认值为{},由于回调函数返回的是number而不是{},因此预期下面的代码将导致类型错误是合理的
function foo<T = {}>(callback: () => T): T {
return callback();
}
let bar = foo(() => 1); // bar: number
但我们知道T是从回调返回值中推断出来的,它是:
function foo&l
不知道我想要什么typescript功能,但我想我需要一个通用的(如果那是一个typescript功能)。下面是我的要求。
下面是我到目前为止所知道的。
interface Event {
type: string;
}
type EventType<T extends Event> = T['type'];
type EventHandler<T extends Event> = (event:T): void;
// so far so good
type EventTypeAndHandlerTuple <T extends Event
我有一个接受两个参数的函数。基本上我想让Typescript检查,第二个参数不能包含第一个参数中的键。TS Sandbox interface Todo {
title: string;
description: string;
}
// here I hardcoded the 'title' key on the Omit utility type. My question is, how to make this dynamic, based on the key on the left argument.
function test<T>
我的一位同事写了这个扩展方法,我想为它制作一个示例:
namespace ExtensionMethods {
public static class MyExtensions {
public static Res MyAggregate<T, Res>(this IEnumerable<T> source, Func<Res, int, T, Res> f) {
var i = 0;
Res result = default(Res);
foreach (T
在Typescript中的集合上实现泛型函数时,我注意到编译器无法推断出两个参数的基类型。 function union<T>(first: Set<T>, second: Set<T>): Set<T> {
const newSet = new Set<T>(first);
for (const element of second)
newSet.add(element);
return newSet;
}
class Animal { }
class Dog extends Animal {
bark(
为什么typescript不显示错误,以及如何使其工作? Typescript sandbox。 enum Animal {
BIRD = 'bird',
DOG = 'dog',
}
interface Smth<T extends Animal = Animal> {
id: number;
animalType: T;
config: T extends 'bird' ? number : string; // if its bird - should be a number
}
const smth:
我想编写一个TypeScript函数,它只接受某些字符串,这些字符串是指定类型的属性名称,但是这些属性必须具有string、number或Date的类型。此函数返回另一个函数,该函数接受原始对象(其中选择了属性名称)并返回指定的属性(实际上它执行其他操作,但这是产生相同问题的最简单的情况)。
我试过像这样
"use strict";
type InstancePropertyNames<T, I> = {
[K in keyof T]: T[K] extends I ? K : never;
}[keyof T];
type StringPropertyNa
鉴于以下课程:
public static class MWE
{
public static void Foo<T, TColl>(Expression<Func<IFoo, bool>> bar, TColl foos)
where TColl : IEnumerable<T>
{
}
public static void Foo<T, TColl>(Expression<Func<IFoo, T>> bar, TColl foos)
whe
为什么TypeScript不能使用泛型函数的类型参数上的约束来推断参数的类型或返回类型?
function isNum<T extends number>(x:T):T extends number?”Y”:”N”{
return “Y”; // <- error: type “Y” is not assignable to type ‘T extends number?”Y”:”N”’
}
有没有什么方法可以达到预期的效果(除了分叉TS)?
(使用TS 2.9.2)
看看这三个类。Minatchi允许自己进行扩展,因此它的方法的返回类型也可以扩展。为了说明这一点,我使用了静态方法。
public class Minatchi<T extends Minatchi<?>>{
static public <T extends Minatchi<?>>
List<T> listAll(){
return
(List<T>) query();
}
}
所以我把米纳奇细分为女士
public class Lady
extends Minatchi&l
TypeScript 3.0引入了一种名为unknown的新类型,它正是这样做的。就像any一样,任何值都可以分配给unknown;但是,与any不同,您不能使用unknown类型访问值上的任何属性,也不能调用/构造它们。此外,unknown类型的值只能分配给unknown或any。
例如,将上面的示例替换为使用unknown而不是any强制将foo的所有用法转换为一个错误:
let foo: unknown = 10;
// Since `foo` has type `unknown`, TypeScript
// errors on each of these usages.
我只是在阅读这个网站上的一个帖子,我看到了一些不寻常的类定义,我无法很好地理解它。有人能给我解释一下这个定义是什么意思吗?
public class Node<T> where T : class
{
public Node<T> Next { get; set; }
public T Value { get; set; }
public Node(T value)
{
Next = null;
Value = value;
}
}
尤其是在上面写着
public class Nod
我无法理解TypeScript文档中的以下段落:
泛型函数的类型与非泛型函数的类型类似,类型参数列在前面,类似于函数声明:
function identity<T>(arg: T): T {
return arg;
}
let myIdentity: <T>(arg: T) => T = identity;
最后一行是做什么的,为什么要用它?
据我所知,myIdentity是一个获取标识函数类型的变量?如果是这样,为什么我需要定义这样一个变量呢?函数identity已经声明了我所期望的返回类型。
在我的项目中,我使用的是反应式打字本。对于状态管理,我使用的是React redux,对于函数处理,我使用的是redux-saga。为了粘合redux存储和函数,我使用了React的新钩子useSelector和useDispatch。我成功地提取了数据并能够在控制台中显示出来。。基于useSelector文档,我可以在不传递到状态的情况下呈现useSelector。当我映射useSelector的变量时,我得到了TypeScript错误:Object is of type 'unknown'. PS。我也是TypeScript中的新手。
这是我的反应功能组件
import R
在下面的代码中,我尝试创建一个访问给定输入的data属性的类型安全函数。我的目标是避免在任何地方重复对data的访问,为此,我希望将样板保持在最小(例如,我希望TypeScript推断尽可能多的类型)。
interface User {
name: string
}
interface HttpResponse<T> {
data: T
status: number
}
type HttpPromise<T> = Promise<HttpResponse<T>>
function fetch<T>(url
使用我的代码 for (const [teamName, teamData] of Object.entries<TeamsData>(data)) {
...
} 我得到了错误 Argument of type 'TeamsData' is not assignable to parameter of type '{ [s: string]: TeamsData; } | ArrayLike<TeamsData>'.
Property 'length' is missing in type 'TeamsD