Javascript D3、类型脚本和图形节点(类型脚本接口中的可选字段)
以下是中定义的Javascript D3、类型脚本和图形节点(类型脚本接口中的可选字段),javascript,visual-studio,d3.js,typescript,typing,Javascript,Visual Studio,D3.js,Typescript,Typing,以下是中定义的D3.Layout.GraphNode和D3.Layout.GraphLink的定义 但是,GraphNode并不一定总是具有所有这些属性。例如,这里有一个GraphLink,它的源代码:GraphNode和目标代码:GraphNode,这两个属性都不具备所有属性 此外,我不能有这样的课程: class GraphData { nodes: D3.Layout.GraphNode[]; links: D3.Layout.GraphLink[]; } 因为这样做是
D3.Layout.GraphNode
和D3.Layout.GraphLink
的定义
但是,GraphNode
并不一定总是具有所有这些属性。例如,这里有一个GraphLink
,它的源代码:GraphNode
和目标代码:GraphNode
,这两个属性都不具备所有属性
此外,我不能有这样的课程:
class GraphData {
nodes: D3.Layout.GraphNode[];
links: D3.Layout.GraphLink[];
}
因为这样做是行不通的:
var data:GraphData = {
"nodes": [{
"group": 0,
"id": 0
}, {
"group": 0,
"id": 1
}, {
"group": 0,
"id": 2
}],
"links": [{
"source": 0,
"target": 2,
"value": 1
}, {
"source": 0,
"target": 0,
"value": 1
}, {
"source": 2,
"target": 1,
"value": 1
}, {
"source": 2,
"target": 1,
"value": 1
}]
}
typescript编译器给了我以下错误:
Compile Error.
See error list for details
C:/Projects/MyGraph/app.ts(111,23): error TS2082: Supplied parameters do not match any signature of call target:
Types of property 'nodes' of types '{ "nodes": { "group": number; "id": number; }[]; "links": { "source": number; "target": number; "value": number; }[]; }' and 'GraphData' are incompatible:
Type '{ "group": number; "id": number; }' is missing property 'index' from type 'D3.Layout.GraphNode'.
解决此问题的一种方法是将接口GraphNode
中的所有字段都设置为可选。但是界面是无用的。
在这种情况下,如何利用TypeScripts静态类型?所有这些都不是必需的,但可能有一些是必需的,接口定义尚未反映出这一点。也许您可以标记哪些是可选的社区支持
无论如何。当你想对他人实施严格的行为,但又想灵活地突破自我时,你可以使用任何方法。e、 g:
var data:GraphData = <any>{
"nodes": [{
"group": 0,
"id": 0
}, {
"group": 0,
"id": 1
}, {
"group": 0,
"id": 2
}],
"links": [{
"source": 0,
"target": 2,
"value": 1
}, {
"source": 0,
"target": 0,
"value": 1
}, {
"source": 2,
"target": 1,
"value": 1
}, {
"source": 2,
"target": 1,
"value": 1
}]
}
var数据:GraphData={
“节点”:[{
“组”:0,
“id”:0
}, {
“组”:0,
“id”:1
}, {
“组”:0,
“id”:2
}],
“链接”:[{
“来源”:0,
"目标":二,,
“价值”:1
}, {
“来源”:0,
“目标”:0,
“价值”:1
}, {
“来源”:2,
"目标":一,,
“价值”:1
}, {
“来源”:2,
"目标":一,,
“价值”:1
}]
}
所有这些都不是必需的,但可能有些是必需的,并且接口定义尚未反映出这一点。也许您可以标记哪些是可选的社区支持
无论如何。当你想对他人实施严格的行为,但又想灵活地突破自我时,你可以使用任何方法。e、 g:
var data:GraphData = <any>{
"nodes": [{
"group": 0,
"id": 0
}, {
"group": 0,
"id": 1
}, {
"group": 0,
"id": 2
}],
"links": [{
"source": 0,
"target": 2,
"value": 1
}, {
"source": 0,
"target": 0,
"value": 1
}, {
"source": 2,
"target": 1,
"value": 1
}, {
"source": 2,
"target": 1,
"value": 1
}]
}
var数据:GraphData={
“节点”:[{
“组”:0,
“id”:0
}, {
“组”:0,
“id”:1
}, {
“组”:0,
“id”:2
}],
“链接”:[{
“来源”:0,
"目标":二,,
“价值”:1
}, {
“来源”:0,
“目标”:0,
“价值”:1
}, {
“来源”:2,
"目标":一,,
“价值”:1
}, {
“来源”:2,
"目标":一,,
“价值”:1
}]
}
感谢有关的提示,d3引擎甚至自动生成id
字段,以便链接的源和目标属性正常工作。我考虑过将可选字段标记为可选字段,并打开一个合并请求以DefinitelyTyped,但很难说哪一个是可选的@LevDubinets这就是typescript之前的生活:)是的,我想,但在这种情况下,typescript似乎不能解决它创建时要解决的问题。它可以解决您自己的代码。它的第三方js是痛苦的,当然,它对我自己的代码来说是无价的!但是,我们多久编写一次不使用第三方库的javascript?感谢关于的提示,d3引擎甚至自动生成id
字段,以便链接的源和目标属性正常工作。我考虑过将可选字段标记为可选字段,并打开一个合并请求以DefinitelyTyped,但很难说哪一个是可选的@LevDubinets这就是typescript之前的生活:)是的,我想,但在这种情况下,typescript似乎不能解决它创建时要解决的问题。它可以解决您自己的代码。它的第三方js是痛苦的,当然,它对我自己的代码来说是无价的!但是我们多久编写一次不使用第三方库的javascript?