我想在TypeScript中使用JSX語法,但我不想使用React。沒有反應的TypeScript JSX
我已經看到了關於SO的其他相關問題的答案,但沒有任何內容是完整的或足夠詳細的以至於沒有任何幫助。我讀過手冊的和JSX chapter,它沒有多大幫助。我不明白語言功能本身是如何工作的。
我試過檢查React聲明,但它對我來說吸收太大了 - 我需要一個最小的工作示例來演示類型檢查的元素,組件和屬性。 (它不需要工廠功能的工作實現,我最感興趣的是聲明。)
我想,最起碼,是一個例子,使下面的工作,類型 - 安全:
var el = <Ping blurt="ya"></Ping>;
var div = <div id="foo">Hello JSX! {el}</div>;
我想我至少需要申報JSX.IntrinsicElements
,以及某種形式的createElement()
工廠的功能,但也僅此就我:
declare module JSX {
interface IntrinsicElements {
div: flurp.VNode<HTMLDivElement>;
}
}
module flurp {
export interface VNode<E extends Element> {
id: string
}
export function createElement<T extends Element>(type: string, props?: any, ...children: (VNode<Element>|string)[]): VNode<Element> {
return {
id: props["id"]
};
}
}
class Ping {
// ???
}
var el = <Ping blurt="ya"></Ping>;
var div = <div id="foo">Hello JSX! {el}</div>;
我編譯這與tsconfig.json
像:
{
"compilerOptions": {
"target": "es5",
"jsx": "react",
"reactNamespace": "flurp"
}
}
懸停在<div>
元素和屬性id="foo"
,我可以看到,編譯器理解我的內在要素的聲明 - 到目前爲止,那麼好。
現在,要獲得要編譯的<Ping blurt="ya">
聲明,並對類型檢查blurt
屬性,我該怎麼做?應該Ping
甚至是class
或者它可能是function
什麼?
理想情況下,元素和組件應該有某種共同的祖先,所以我可以擁有一套適用於這兩者的共同屬性。
我正在尋找創建一些簡單和輕量級的東西,可能沿着monkberry的路線,但是使用JSX語法,例如,使用組件如<If>
和<For>
而不是內聯語句。這甚至可行嗎? (是否有任何現有項目可供我參考?)
如果任何人都可以提供有關如何使用語言功能本身的最小范例,那將是一個巨大的幫助!
對不起,你罰了一個答案嗎?你能舉一個例子嗎? –