我正在使用类似脚本创建一个类,该类具有ES6(ECMAscript 2016)Map的属性,如下所示:
class Item {
configs: ????;
constructor () {
this.configs = new Map();
}
}
Run Code Online (Sandbox Code Playgroud)
如何在打字稿中声明ES6 Map类型?
我的应用程序中有一个界面:
interface Asset {
id: string;
internal_id: string;
usage: number;
}
Run Code Online (Sandbox Code Playgroud)
这是帖子界面的一部分:
interface Post {
asset: Asset;
}
Run Code Online (Sandbox Code Playgroud)
我还有一个用于后期草稿的界面,其中资产对象可能只是部分构造的
interface PostDraft {
asset: Asset;
}
Run Code Online (Sandbox Code Playgroud)
我想允许一个PostDraft对象拥有一个部分资产对象,同时仍然检查那里的属性上的类型(所以我不想只是将其交换掉any).
我基本上想要一种能够生成以下内容的方法:
interface AssetDraft {
id?: string;
internal_id?: string;
usage?: number;
}
Run Code Online (Sandbox Code Playgroud)
没有完全重新定义Asset界面.有没有办法做到这一点?如果没有,在这种情况下安排我的类型的聪明方法是什么?
我有问题,当在TypeScript中使用命名参数时,我知道它不支持我在TS中使用它的方式.但我怎么能
打字稿:
SomeFunction(name1: boolean, name2: boolean, name3: boolean, name4: boolean) //will occur only 1 time, so the change should be in typescript
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
$(function () {
...SomeFunction({name1:false, name2:false, name3:false, name4:true}); //will occur 100 times
});
Run Code Online (Sandbox Code Playgroud)
我在看(这没有用):
我可以在TypeScript中做什么,在JavaScript中使用命名参数?
我想知道的是,当我在TypeScript中使用它时,VS2015在使用命名参数时没有显示语法错误...
ps.:我使用TS 2.1
export class Foo{
someproperty: string;
}
Run Code Online (Sandbox Code Playgroud)
我试图理解为什么,当尝试访问动态对象属性时,我可以执行以下操作,正如我在此处的答案之一中所看到的:
let fooObj: foo = someObj['someproperty'];
Run Code Online (Sandbox Code Playgroud)
但是这样做,我得到一个错误。
let fooObj: foo = someObj.someproperty;
Run Code Online (Sandbox Code Playgroud)
我试图理解为什么第一种方法可用于访问/分配动态对象。
错误:
"someproperty does not exist on type"
在此之前提出的问题,我感兴趣的是Angelo R的回答。
这是我的代码的一部分:
const myObj: object = {}
const propname = 'propname'
myObj[propname] = 'string'
Run Code Online (Sandbox Code Playgroud)
但我得到了错误:
ERROR in path/to/file.ts(4,1)
TS7053: Element implicitly has an 'any' type because expression of type '"propname"' can't be used to index type '{}'.
Property 'propname' does not exist on type '{}'.
Run Code Online (Sandbox Code Playgroud)
这有什么问题,我该如何解决?
考虑以下代码,其中第 2 行失败并显示Property 'newProperty' does not exist on type 'WritableDraft<MyObject>'. TS7053
// data is of type MyObject which until now has only a property myNumber
const payload = produce(data, (draft) => {
draft['newProperty'] = 'test'; // Property 'newProperty' does not exist on type 'WritableDraft<MyObject>'. TS7053
});
Run Code Online (Sandbox Code Playgroud)
如何动态地将新属性添加到草稿或将草稿的类型更改为已包含 的类型newProperty?我不想newProperty在MyObject类型本身中拥有。
类似但不同于如何在TypeScript中为对象动态分配属性?
我有一个状态类型的组件:
{
low: string
high: string
}
Run Code Online (Sandbox Code Playgroud)
和React中的常见模式一样,我的事件处理程序是:
handleChange = (e) => {
let { name, value } = e.target;
this.setState({ [name]: value });
};
Run Code Online (Sandbox Code Playgroud)
使用high和low作为name我输入的属性.打字稿错误:
Argument of type '{ [x: string]: string; }' is not assignable to parameter of type 'Pick<State, "low" | "high">'
有没有办法让我告诉Typescript我只期望那两个值?我想避免显式将密钥传递给处理程序,但不希望将状态更改为:
{
low: string
high: string
[key: string]: string
}
Run Code Online (Sandbox Code Playgroud)